git.delta.rocks / unique-network / refs/commits / 3e2337f86885

difftreelog

Merge pull request #1040 from UniqueNetwork/feature/update-polkadot-v1.3.0

Yaroslav Bolyukin2023-11-22parents: #f02a706 #82da160.patch.diff
in: master
Update polkadot to v1.3.0

70 files changed

modifiedCargo.lockdiffbeforeafterboth
110 "cipher 0.3.0",110 "cipher 0.3.0",
111 "ctr 0.8.0",111 "ctr 0.8.0",
112 "ghash 0.4.4",112 "ghash 0.4.4",
113 "subtle",113 "subtle 2.4.1",
114]114]
115115
116[[package]]116[[package]]
124 "cipher 0.4.4",124 "cipher 0.4.4",
125 "ctr 0.9.2",125 "ctr 0.9.2",
126 "ghash 0.5.0",126 "ghash 0.5.0",
127 "subtle",127 "subtle 2.4.1",
128]128]
129129
130[[package]]130[[package]]
149149
150[[package]]150[[package]]
151name = "ahash"151name = "ahash"
152version = "0.7.6"152version = "0.7.7"
153source = "registry+https://github.com/rust-lang/crates.io-index"153source = "registry+https://github.com/rust-lang/crates.io-index"
154checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"154checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
155dependencies = [155dependencies = [
156 "getrandom 0.2.10",156 "getrandom 0.2.11",
157 "once_cell",157 "once_cell",
158 "version_check",158 "version_check",
159]159]
160160
161[[package]]161[[package]]
162name = "ahash"162name = "ahash"
163version = "0.8.3"163version = "0.8.6"
164source = "registry+https://github.com/rust-lang/crates.io-index"164source = "registry+https://github.com/rust-lang/crates.io-index"
165checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"165checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
166dependencies = [166dependencies = [
167 "cfg-if",167 "cfg-if",
168 "getrandom 0.2.10",168 "getrandom 0.2.11",
169 "once_cell",169 "once_cell",
170 "version_check",170 "version_check",
171 "zerocopy",
171]172]
172173
173[[package]]174[[package]]
174name = "aho-corasick"175name = "aho-corasick"
175version = "1.1.1"176version = "1.1.2"
176source = "registry+https://github.com/rust-lang/crates.io-index"177source = "registry+https://github.com/rust-lang/crates.io-index"
177checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"178checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
178dependencies = [179dependencies = [
179 "memchr",180 "memchr",
180]181]
310checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"311checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
311312
312[[package]]313[[package]]
314name = "ark-bls12-377"
315version = "0.4.0"
316source = "registry+https://github.com/rust-lang/crates.io-index"
317checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f"
318dependencies = [
319 "ark-ec",
320 "ark-ff",
321 "ark-std",
322]
323
324[[package]]
313name = "ark-bls12-381"325name = "ark-bls12-381"
314version = "0.4.0"326version = "0.4.0"
315source = "registry+https://github.com/rust-lang/crates.io-index"327source = "registry+https://github.com/rust-lang/crates.io-index"
339]351]
340352
341[[package]]353[[package]]
342name = "ark-ed-on-bls12-381-bandersnatch"
343version = "0.4.0"
344source = "registry+https://github.com/rust-lang/crates.io-index"
345checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c"
346dependencies = [
347 "ark-bls12-381",
348 "ark-ec",
349 "ark-ff",
350 "ark-std",
351]
352
353[[package]]
354name = "ark-ff"354name = "ark-ff"
355version = "0.4.2"355version = "0.4.2"
356source = "registry+https://github.com/rust-lang/crates.io-index"356source = "registry+https://github.com/rust-lang/crates.io-index"
407]407]
408408
409[[package]]409[[package]]
410name = "ark-scale"
411version = "0.0.10"
412source = "registry+https://github.com/rust-lang/crates.io-index"
413checksum = "49b08346a3e38e2be792ef53ee168623c9244d968ff00cd70fb9932f6fe36393"
414dependencies = [
415 "ark-ec",
416 "ark-ff",
417 "ark-serialize",
418 "ark-std",
419 "parity-scale-codec",
420]
421
422[[package]]
423name = "ark-scale"
424version = "0.0.11"
425source = "registry+https://github.com/rust-lang/crates.io-index"
426checksum = "51bd73bb6ddb72630987d37fa963e99196896c0d0ea81b7c894567e74a2f83af"
427dependencies = [
428 "ark-ec",
429 "ark-ff",
430 "ark-serialize",
431 "ark-std",
432 "parity-scale-codec",
433 "scale-info",
434]
435
436[[package]]
437name = "ark-secret-scalar"
438version = "0.0.2"
439source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1"
440dependencies = [
441 "ark-ec",
442 "ark-ff",
443 "ark-serialize",
444 "ark-std",
445 "ark-transcript",
446 "digest 0.10.7",
447 "rand_core 0.6.4",
448 "zeroize",
449]
450
451[[package]]
452name = "ark-serialize"410name = "ark-serialize"
453version = "0.4.2"411version = "0.4.2"
454source = "registry+https://github.com/rust-lang/crates.io-index"412source = "registry+https://github.com/rust-lang/crates.io-index"
482]440]
483441
484[[package]]442[[package]]
485name = "ark-transcript"443name = "array-bytes"
486version = "0.0.2"444version = "4.2.0"
487source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1"445source = "registry+https://github.com/rust-lang/crates.io-index"
488dependencies = [446checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6"
489 "ark-ff",
490 "ark-serialize",
491 "ark-std",
492 "digest 0.10.7",
493 "rand_core 0.6.4",
494 "sha3 0.10.8",
495]
496447
497[[package]]448[[package]]
498name = "array-bytes"449name = "array-bytes"
499version = "6.1.0"450version = "6.2.0"
500source = "registry+https://github.com/rust-lang/crates.io-index"451source = "registry+https://github.com/rust-lang/crates.io-index"
501checksum = "d9b1c5a481ec30a5abd8dfbd94ab5cf1bb4e9a66be7f1b3b322f2f1170c200fd"452checksum = "de17a919934ad8c5cc99a1a74de4e2dab95d6121a8f27f94755ff525b630382c"
502453
503[[package]]454[[package]]
504name = "arrayref"455name = "arrayref"
607checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"558checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
608dependencies = [559dependencies = [
609 "concurrent-queue",560 "concurrent-queue",
610 "event-listener",561 "event-listener 2.5.3",
611 "futures-core",562 "futures-core",
612]563]
613564
614[[package]]565[[package]]
566name = "async-channel"
567version = "2.1.0"
568source = "registry+https://github.com/rust-lang/crates.io-index"
569checksum = "d37875bd9915b7d67c2f117ea2c30a0989874d0b2cb694fe25403c85763c0c9e"
570dependencies = [
571 "concurrent-queue",
572 "event-listener 3.1.0",
573 "event-listener-strategy",
574 "futures-core",
575 "pin-project-lite 0.2.13",
576]
577
578[[package]]
615name = "async-executor"579name = "async-executor"
616version = "1.5.4"580version = "1.7.2"
617source = "registry+https://github.com/rust-lang/crates.io-index"581source = "registry+https://github.com/rust-lang/crates.io-index"
618checksum = "2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499"582checksum = "fc5ea910c42e5ab19012bab31f53cb4d63d54c3a27730f9a833a88efcf4bb52d"
619dependencies = [583dependencies = [
620 "async-lock",584 "async-lock 3.1.1",
621 "async-task",585 "async-task",
622 "concurrent-queue",586 "concurrent-queue",
623 "fastrand 2.0.1",587 "fastrand 2.0.1",
624 "futures-lite",588 "futures-lite 2.0.1",
625 "slab",589 "slab",
626]590]
627591
631source = "registry+https://github.com/rust-lang/crates.io-index"595source = "registry+https://github.com/rust-lang/crates.io-index"
632checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"596checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
633dependencies = [597dependencies = [
634 "async-lock",598 "async-lock 2.8.0",
635 "autocfg",599 "autocfg",
636 "blocking",600 "blocking",
637 "futures-lite",601 "futures-lite 1.13.0",
638]602]
639603
640[[package]]604[[package]]
643source = "registry+https://github.com/rust-lang/crates.io-index"607source = "registry+https://github.com/rust-lang/crates.io-index"
644checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"608checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
645dependencies = [609dependencies = [
646 "async-lock",610 "async-lock 2.8.0",
647 "autocfg",611 "autocfg",
648 "cfg-if",612 "cfg-if",
649 "concurrent-queue",613 "concurrent-queue",
650 "futures-lite",614 "futures-lite 1.13.0",
651 "log",615 "log",
652 "parking",616 "parking",
653 "polling",617 "polling 2.8.0",
654 "rustix 0.37.24",618 "rustix 0.37.27",
655 "slab",619 "slab",
656 "socket2 0.4.9",620 "socket2 0.4.10",
657 "waker-fn",621 "waker-fn",
658]622]
659623
660[[package]]624[[package]]
625name = "async-io"
626version = "2.2.0"
627source = "registry+https://github.com/rust-lang/crates.io-index"
628checksum = "41ed9d5715c2d329bf1b4da8d60455b99b187f27ba726df2883799af9af60997"
629dependencies = [
630 "async-lock 3.1.1",
631 "cfg-if",
632 "concurrent-queue",
633 "futures-io",
634 "futures-lite 2.0.1",
635 "parking",
636 "polling 3.3.0",
637 "rustix 0.38.25",
638 "slab",
639 "tracing",
640 "waker-fn",
641 "windows-sys 0.48.0",
642]
643
644[[package]]
661name = "async-lock"645name = "async-lock"
662version = "2.8.0"646version = "2.8.0"
663source = "registry+https://github.com/rust-lang/crates.io-index"647source = "registry+https://github.com/rust-lang/crates.io-index"
664checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"648checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
665dependencies = [649dependencies = [
666 "event-listener",650 "event-listener 2.5.3",
667]651]
668652
669[[package]]653[[package]]
654name = "async-lock"
655version = "3.1.1"
656source = "registry+https://github.com/rust-lang/crates.io-index"
657checksum = "655b9c7fe787d3b25cc0f804a1a8401790f0c5bc395beb5a64dc77d8de079105"
658dependencies = [
659 "event-listener 3.1.0",
660 "event-listener-strategy",
661 "pin-project-lite 0.2.13",
662]
663
664[[package]]
670name = "async-net"665name = "async-net"
671version = "1.8.0"666version = "1.8.0"
672source = "registry+https://github.com/rust-lang/crates.io-index"667source = "registry+https://github.com/rust-lang/crates.io-index"
673checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"668checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"
674dependencies = [669dependencies = [
675 "async-io",670 "async-io 1.13.0",
676 "blocking",671 "blocking",
677 "futures-lite",672 "futures-lite 1.13.0",
678]673]
679674
680[[package]]675[[package]]
681name = "async-process"676name = "async-process"
682version = "1.7.0"677version = "1.8.1"
683source = "registry+https://github.com/rust-lang/crates.io-index"678source = "registry+https://github.com/rust-lang/crates.io-index"
684checksum = "7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9"679checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
685dependencies = [680dependencies = [
686 "async-io",681 "async-io 1.13.0",
687 "async-lock",682 "async-lock 2.8.0",
688 "autocfg",683 "async-signal",
689 "blocking",684 "blocking",
690 "cfg-if",685 "cfg-if",
691 "event-listener",686 "event-listener 3.1.0",
692 "futures-lite",687 "futures-lite 1.13.0",
693 "rustix 0.37.24",688 "rustix 0.38.25",
694 "signal-hook",
695 "windows-sys 0.48.0",689 "windows-sys 0.48.0",
696]690]
697691
698[[package]]692[[package]]
699name = "async-recursion"693name = "async-signal"
700version = "1.0.5"694version = "0.2.5"
701source = "registry+https://github.com/rust-lang/crates.io-index"695source = "registry+https://github.com/rust-lang/crates.io-index"
702checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"696checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
703dependencies = [697dependencies = [
704 "proc-macro2",698 "async-io 2.2.0",
705 "quote",699 "async-lock 2.8.0",
706 "syn 2.0.37",700 "atomic-waker",
701 "cfg-if",
702 "futures-core",
703 "futures-io",
704 "rustix 0.38.25",
705 "signal-hook-registry",
706 "slab",
707 "windows-sys 0.48.0",
707]708]
708709
709[[package]]710[[package]]
710name = "async-task"711name = "async-task"
711version = "4.4.1"712version = "4.5.0"
712source = "registry+https://github.com/rust-lang/crates.io-index"713source = "registry+https://github.com/rust-lang/crates.io-index"
713checksum = "b9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921"714checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
714715
715[[package]]716[[package]]
716name = "async-trait"717name = "async-trait"
717version = "0.1.73"718version = "0.1.74"
718source = "registry+https://github.com/rust-lang/crates.io-index"719source = "registry+https://github.com/rust-lang/crates.io-index"
719checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"720checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
720dependencies = [721dependencies = [
721 "proc-macro2",722 "proc-macro2",
722 "quote",723 "quote",
723 "syn 2.0.37",724 "syn 2.0.39",
724]725]
725726
726[[package]]727[[package]]
793]794]
794795
795[[package]]796[[package]]
796name = "bandersnatch_vrfs"
797version = "0.0.1"
798source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1"
799dependencies = [
800 "ark-bls12-381",
801 "ark-ec",
802 "ark-ed-on-bls12-381-bandersnatch",
803 "ark-ff",
804 "ark-scale 0.0.11",
805 "ark-serialize",
806 "ark-std",
807 "dleq_vrf",
808 "fflonk",
809 "merlin 3.0.0",
810 "rand_chacha 0.3.1",
811 "rand_core 0.6.4",
812 "ring 0.1.0",
813 "sha2 0.10.8",
814 "zeroize",
815]
816
817[[package]]
818name = "base-x"797name = "base-x"
819version = "0.2.11"798version = "0.2.11"
820source = "registry+https://github.com/rust-lang/crates.io-index"799source = "registry+https://github.com/rust-lang/crates.io-index"
840819
841[[package]]820[[package]]
842name = "base64"821name = "base64"
843version = "0.21.4"822version = "0.21.5"
844source = "registry+https://github.com/rust-lang/crates.io-index"823source = "registry+https://github.com/rust-lang/crates.io-index"
845checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"824checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
846825
847[[package]]826[[package]]
848name = "base64ct"827name = "base64ct"
861840
862[[package]]841[[package]]
863name = "binary-merkle-tree"842name = "binary-merkle-tree"
864version = "4.0.0-dev"843version = "10.0.0"
865source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"844source = "registry+https://github.com/rust-lang/crates.io-index"
845checksum = "a399848a68a5196a04c19db5bfc4dca3cd0989a3165150f06c1ad1bc8882aa34"
866dependencies = [846dependencies = [
867 "hash-db 0.16.0",847 "hash-db 0.16.0",
868 "log",848 "log",
895 "regex",875 "regex",
896 "rustc-hash",876 "rustc-hash",
897 "shlex",877 "shlex",
898 "syn 2.0.37",878 "syn 2.0.39",
899]879]
900880
901[[package]]881[[package]]
921901
922[[package]]902[[package]]
923name = "bitflags"903name = "bitflags"
924version = "2.4.0"904version = "2.4.1"
925source = "registry+https://github.com/rust-lang/crates.io-index"905source = "registry+https://github.com/rust-lang/crates.io-index"
926checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"906checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
927907
928[[package]]908[[package]]
929name = "bitvec"909name = "bitvec"
939919
940[[package]]920[[package]]
941name = "blake2"921name = "blake2"
922version = "0.8.1"
923source = "registry+https://github.com/rust-lang/crates.io-index"
924checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330"
925dependencies = [
926 "byte-tools",
927 "crypto-mac 0.7.0",
928 "digest 0.8.1",
929 "opaque-debug 0.2.3",
930]
931
932[[package]]
933name = "blake2"
942version = "0.10.6"934version = "0.10.6"
943source = "registry+https://github.com/rust-lang/crates.io-index"935source = "registry+https://github.com/rust-lang/crates.io-index"
944checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"936checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
10481040
1049[[package]]1041[[package]]
1050name = "blocking"1042name = "blocking"
1051version = "1.4.0"1043version = "1.5.1"
1052source = "registry+https://github.com/rust-lang/crates.io-index"1044source = "registry+https://github.com/rust-lang/crates.io-index"
1053checksum = "94c4ef1f913d78636d78d538eec1f18de81e481f44b1be0a81060090530846e1"1045checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118"
1054dependencies = [1046dependencies = [
1055 "async-channel",1047 "async-channel 2.1.0",
1056 "async-lock",1048 "async-lock 3.1.1",
1057 "async-task",1049 "async-task",
1058 "fastrand 2.0.1",1050 "fastrand 2.0.1",
1059 "futures-io",1051 "futures-io",
1060 "futures-lite",1052 "futures-lite 2.0.1",
1061 "piper",1053 "piper",
1062 "tracing",1054 "tracing",
1063]1055]
10841076
1085[[package]]1077[[package]]
1086name = "bounded-collections"1078name = "bounded-collections"
1087version = "0.1.8"1079version = "0.1.9"
1088source = "registry+https://github.com/rust-lang/crates.io-index"1080source = "registry+https://github.com/rust-lang/crates.io-index"
1089checksum = "eb5b05133427c07c4776906f673ccf36c21b102c9829c641a5b56bd151d44fd6"1081checksum = "ca548b6163b872067dc5eb82fd130c56881435e30367d2073594a3d9744120dd"
1090dependencies = [1082dependencies = [
1091 "log",1083 "log",
1092 "parity-scale-codec",1084 "parity-scale-codec",
1104]1096]
11051097
1106[[package]]1098[[package]]
1099name = "bp-xcm-bridge-hub-router"
1100version = "0.3.0"
1101source = "registry+https://github.com/rust-lang/crates.io-index"
1102checksum = "be3b4fafc31f17da1b4ea403c4118e4f4f1d9a5a696729b374551d582e48633b"
1103dependencies = [
1104 "parity-scale-codec",
1105 "scale-info",
1106 "sp-core",
1107 "sp-runtime",
1108]
1109
1110[[package]]
1107name = "bs58"1111name = "bs58"
1108version = "0.4.0"1112version = "0.4.0"
1109source = "registry+https://github.com/rust-lang/crates.io-index"1113source = "registry+https://github.com/rust-lang/crates.io-index"
11201124
1121[[package]]1125[[package]]
1122name = "bstr"1126name = "bstr"
1123version = "1.6.2"1127version = "1.8.0"
1124source = "registry+https://github.com/rust-lang/crates.io-index"1128source = "registry+https://github.com/rust-lang/crates.io-index"
1125checksum = "4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266a"1129checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
1126dependencies = [1130dependencies = [
1127 "memchr",1131 "memchr",
1128 "serde",1132 "serde",
11631167
1164[[package]]1168[[package]]
1165name = "byteorder"1169name = "byteorder"
1166version = "1.4.3"1170version = "1.5.0"
1167source = "registry+https://github.com/rust-lang/crates.io-index"1171source = "registry+https://github.com/rust-lang/crates.io-index"
1168checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"1172checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
11691173
1170[[package]]1174[[package]]
1171name = "bytes"1175name = "bytes"
1185]1189]
11861190
1187[[package]]1191[[package]]
1192name = "c2-chacha"
1193version = "0.3.3"
1194source = "registry+https://github.com/rust-lang/crates.io-index"
1195checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80"
1196dependencies = [
1197 "cipher 0.2.5",
1198 "ppv-lite86",
1199]
1200
1201[[package]]
1188name = "camino"1202name = "camino"
1189version = "1.1.6"1203version = "1.1.6"
1190source = "registry+https://github.com/rust-lang/crates.io-index"1204source = "registry+https://github.com/rust-lang/crates.io-index"
11951209
1196[[package]]1210[[package]]
1197name = "cargo-platform"1211name = "cargo-platform"
1198version = "0.1.3"1212version = "0.1.5"
1199source = "registry+https://github.com/rust-lang/crates.io-index"1213source = "registry+https://github.com/rust-lang/crates.io-index"
1200checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479"1214checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
1201dependencies = [1215dependencies = [
1202 "serde",1216 "serde",
1203]1217]
1210dependencies = [1224dependencies = [
1211 "camino",1225 "camino",
1212 "cargo-platform",1226 "cargo-platform",
1213 "semver 1.0.19",1227 "semver 1.0.20",
1214 "serde",1228 "serde",
1215 "serde_json",1229 "serde_json",
1216 "thiserror",1230 "thiserror",
1234dependencies = [1248dependencies = [
1235 "aead 0.3.2",1249 "aead 0.3.2",
1236 "cipher 0.2.5",1250 "cipher 0.2.5",
1237 "subtle",1251 "subtle 2.4.1",
1238]1252]
12391253
1240[[package]]1254[[package]]
1268checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"1282checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
12691283
1270[[package]]1284[[package]]
1271name = "chacha20"1285name = "chacha"
1272version = "0.8.2"1286version = "0.3.0"
1273source = "registry+https://github.com/rust-lang/crates.io-index"1287source = "registry+https://github.com/rust-lang/crates.io-index"
1274checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6"1288checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862"
1275dependencies = [1289dependencies = [
1276 "cfg-if",1290 "byteorder",
1277 "cipher 0.3.0",1291 "keystream",
1278 "cpufeatures",
1279 "zeroize",
1280]1292]
12811293
1282[[package]]1294[[package]]
12921304
1293[[package]]1305[[package]]
1294name = "chacha20poly1305"1306name = "chacha20poly1305"
1295version = "0.9.1"1307version = "0.10.1"
1296source = "registry+https://github.com/rust-lang/crates.io-index"1308source = "registry+https://github.com/rust-lang/crates.io-index"
1297checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5"1309checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
1298dependencies = [1310dependencies = [
1299 "aead 0.4.3",1311 "aead 0.5.2",
1300 "chacha20 0.8.2",1312 "chacha20",
1301 "cipher 0.3.0",1313 "cipher 0.4.4",
1302 "poly1305 0.7.2",1314 "poly1305",
1303 "zeroize",1315 "zeroize",
1304]1316]
13051317
1356dependencies = [1368dependencies = [
1357 "crypto-common",1369 "crypto-common",
1358 "inout",1370 "inout",
1371 "zeroize",
1359]1372]
13601373
1361[[package]]1374[[package]]
13801393
1381[[package]]1394[[package]]
1382name = "clap"1395name = "clap"
1383version = "4.4.6"1396version = "4.4.8"
1384source = "registry+https://github.com/rust-lang/crates.io-index"1397source = "registry+https://github.com/rust-lang/crates.io-index"
1385checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956"1398checksum = "2275f18819641850fa26c89acc84d465c1bf91ce57bc2748b28c420473352f64"
1386dependencies = [1399dependencies = [
1387 "clap_builder",1400 "clap_builder",
1388 "clap_derive",1401 "clap_derive",
1389]1402]
13901403
1391[[package]]1404[[package]]
1392name = "clap_builder"1405name = "clap_builder"
1393version = "4.4.6"1406version = "4.4.8"
1394source = "registry+https://github.com/rust-lang/crates.io-index"1407source = "registry+https://github.com/rust-lang/crates.io-index"
1395checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45"1408checksum = "07cdf1b148b25c1e1f7a42225e30a0d99a615cd4637eae7365548dd4529b95bc"
1396dependencies = [1409dependencies = [
1397 "anstream",1410 "anstream",
1398 "anstyle",1411 "anstyle",
14021415
1403[[package]]1416[[package]]
1404name = "clap_derive"1417name = "clap_derive"
1405version = "4.4.2"1418version = "4.4.7"
1406source = "registry+https://github.com/rust-lang/crates.io-index"1419source = "registry+https://github.com/rust-lang/crates.io-index"
1407checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"1420checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
1408dependencies = [1421dependencies = [
1409 "heck",1422 "heck",
1410 "proc-macro2",1423 "proc-macro2",
1411 "quote",1424 "quote",
1412 "syn 2.0.37",1425 "syn 2.0.39",
1413]1426]
14141427
1415[[package]]1428[[package]]
1416name = "clap_lex"1429name = "clap_lex"
1417version = "0.5.1"1430version = "0.6.0"
1418source = "registry+https://github.com/rust-lang/crates.io-index"1431source = "registry+https://github.com/rust-lang/crates.io-index"
1419checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"1432checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
14201433
1421[[package]]1434[[package]]
1422name = "coarsetime"1435name = "coarsetime"
1423version = "0.1.28"1436version = "0.1.33"
1424source = "registry+https://github.com/rust-lang/crates.io-index"1437source = "registry+https://github.com/rust-lang/crates.io-index"
1425checksum = "99280f81a35511dda7d44f7c943491b41d3ac6fd0b54aea92498bec8612a2423"1438checksum = "71367d3385c716342014ad17e3d19f7788ae514885a1f4c24f500260fb365e1a"
1426dependencies = [1439dependencies = [
1427 "libc",1440 "libc",
1428 "once_cell",1441 "once_cell",
14481461
1449[[package]]1462[[package]]
1450name = "comfy-table"1463name = "comfy-table"
1451version = "7.0.1"1464version = "7.1.0"
1452source = "registry+https://github.com/rust-lang/crates.io-index"1465source = "registry+https://github.com/rust-lang/crates.io-index"
1453checksum = "9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5b"1466checksum = "7c64043d6c7b7a4c58e39e7efccfdea7b93d885a795d0c054a69dbbf4dd52686"
1454dependencies = [1467dependencies = [
1455 "strum",1468 "strum 0.25.0",
1456 "strum_macros",1469 "strum_macros 0.25.3",
1457 "unicode-width",1470 "unicode-width",
1458]1471]
14591472
1460[[package]]1473[[package]]
1461name = "common"
1462version = "0.1.0"
1463source = "git+https://github.com/w3f/ring-proof?rev=0e948f3#0e948f3c28cbacecdd3020403c4841c0eb339213"
1464dependencies = [
1465 "ark-ec",
1466 "ark-ff",
1467 "ark-poly",
1468 "ark-serialize",
1469 "ark-std",
1470 "fflonk",
1471 "merlin 3.0.0",
1472]
1473
1474[[package]]
1475name = "common-path"1474name = "common-path"
1476version = "1.0.0"1475version = "1.0.0"
1477source = "registry+https://github.com/rust-lang/crates.io-index"1476source = "registry+https://github.com/rust-lang/crates.io-index"
15071506
1508[[package]]1507[[package]]
1509name = "const-random"1508name = "const-random"
1510version = "0.1.15"1509version = "0.1.17"
1511source = "registry+https://github.com/rust-lang/crates.io-index"1510source = "registry+https://github.com/rust-lang/crates.io-index"
1512checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e"1511checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a"
1513dependencies = [1512dependencies = [
1514 "const-random-macro",1513 "const-random-macro",
1515 "proc-macro-hack",
1516]1514]
15171515
1518[[package]]1516[[package]]
1519name = "const-random-macro"1517name = "const-random-macro"
1520version = "0.1.15"1518version = "0.1.16"
1521source = "registry+https://github.com/rust-lang/crates.io-index"1519source = "registry+https://github.com/rust-lang/crates.io-index"
1522checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb"1520checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
1523dependencies = [1521dependencies = [
1524 "getrandom 0.2.10",1522 "getrandom 0.2.11",
1525 "once_cell",1523 "once_cell",
1526 "proc-macro-hack",
1527 "tiny-keccak",1524 "tiny-keccak",
1528]1525]
15291526
1540checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"1537checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
15411538
1542[[package]]1539[[package]]
1540name = "constcat"
1541version = "0.3.1"
1542source = "registry+https://github.com/rust-lang/crates.io-index"
1543checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08"
1544
1545[[package]]
1543name = "convert_case"1546name = "convert_case"
1544version = "0.4.0"1547version = "0.4.0"
1545source = "registry+https://github.com/rust-lang/crates.io-index"1548source = "registry+https://github.com/rust-lang/crates.io-index"
15911594
1592[[package]]1595[[package]]
1593name = "cpufeatures"1596name = "cpufeatures"
1594version = "0.2.9"1597version = "0.2.11"
1595source = "registry+https://github.com/rust-lang/crates.io-index"1598source = "registry+https://github.com/rust-lang/crates.io-index"
1596checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"1599checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
1597dependencies = [1600dependencies = [
1598 "libc",1601 "libc",
1599]1602]
17071710
1708[[package]]1711[[package]]
1709name = "crc-catalog"1712name = "crc-catalog"
1710version = "2.2.0"1713version = "2.4.0"
1711source = "registry+https://github.com/rust-lang/crates.io-index"1714source = "registry+https://github.com/rust-lang/crates.io-index"
1712checksum = "9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484"1715checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
17131716
1714[[package]]1717[[package]]
1715name = "crc32fast"1718name = "crc32fast"
1777dependencies = [1780dependencies = [
1778 "generic-array 0.14.7",1781 "generic-array 0.14.7",
1779 "rand_core 0.6.4",1782 "rand_core 0.6.4",
1780 "subtle",1783 "subtle 2.4.1",
1781 "zeroize",1784 "zeroize",
1782]1785]
17831786
1784[[package]]1787[[package]]
1785name = "crypto-bigint"1788name = "crypto-bigint"
1786version = "0.5.3"1789version = "0.5.5"
1787source = "registry+https://github.com/rust-lang/crates.io-index"1790source = "registry+https://github.com/rust-lang/crates.io-index"
1788checksum = "740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124"1791checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
1789dependencies = [1792dependencies = [
1790 "generic-array 0.14.7",1793 "generic-array 0.14.7",
1791 "rand_core 0.6.4",1794 "rand_core 0.6.4",
1792 "subtle",1795 "subtle 2.4.1",
1793 "zeroize",1796 "zeroize",
1794]1797]
17951798
18061809
1807[[package]]1810[[package]]
1808name = "crypto-mac"1811name = "crypto-mac"
1812version = "0.7.0"
1813source = "registry+https://github.com/rust-lang/crates.io-index"
1814checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
1815dependencies = [
1816 "generic-array 0.12.4",
1817 "subtle 1.0.0",
1818]
1819
1820[[package]]
1821name = "crypto-mac"
1809version = "0.8.0"1822version = "0.8.0"
1810source = "registry+https://github.com/rust-lang/crates.io-index"1823source = "registry+https://github.com/rust-lang/crates.io-index"
1811checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"1824checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
1812dependencies = [1825dependencies = [
1813 "generic-array 0.14.7",1826 "generic-array 0.14.7",
1814 "subtle",1827 "subtle 2.4.1",
1815]1828]
18161829
1817[[package]]1830[[package]]
1821checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"1834checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
1822dependencies = [1835dependencies = [
1823 "generic-array 0.14.7",1836 "generic-array 0.14.7",
1824 "subtle",1837 "subtle 2.4.1",
1825]1838]
18261839
1827[[package]]1840[[package]]
18441857
1845[[package]]1858[[package]]
1846name = "cumulus-client-cli"1859name = "cumulus-client-cli"
1847version = "0.1.0"1860version = "0.4.0"
1848source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"1861source = "registry+https://github.com/rust-lang/crates.io-index"
1862checksum = "858e5a1c2d26c304d75cc7158ed2579f0ff90b68f2d07a2395d073249d485424"
1849dependencies = [1863dependencies = [
1850 "clap",1864 "clap",
1851 "parity-scale-codec",1865 "parity-scale-codec",
18601874
1861[[package]]1875[[package]]
1862name = "cumulus-client-collator"1876name = "cumulus-client-collator"
1863version = "0.1.0"1877version = "0.4.0"
1864source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"1878source = "registry+https://github.com/rust-lang/crates.io-index"
1879checksum = "be58c6ef9780a83267e0b9db50a01158d58ad37ba45ed8162a9ea1b2d61d119c"
1865dependencies = [1880dependencies = [
1866 "cumulus-client-consensus-common",1881 "cumulus-client-consensus-common",
1867 "cumulus-client-network",1882 "cumulus-client-network",
18831898
1884[[package]]1899[[package]]
1885name = "cumulus-client-consensus-aura"1900name = "cumulus-client-consensus-aura"
1886version = "0.1.0"1901version = "0.4.0"
1887source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"1902source = "registry+https://github.com/rust-lang/crates.io-index"
1903checksum = "4b73f52d21017ff0f2dc6542f2873e1dc3e17561656d6af0810fb813fb553694"
1888dependencies = [1904dependencies = [
1889 "async-trait",1905 "async-trait",
1890 "cumulus-client-collator",1906 "cumulus-client-collator",
19251941
1926[[package]]1942[[package]]
1927name = "cumulus-client-consensus-common"1943name = "cumulus-client-consensus-common"
1928version = "0.1.0"1944version = "0.4.0"
1929source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"1945source = "registry+https://github.com/rust-lang/crates.io-index"
1946checksum = "6ec580468eb700a2776cac54871704b3c3894bc0646c3b8375756bfffd24928f"
1930dependencies = [1947dependencies = [
1931 "async-trait",1948 "async-trait",
1932 "cumulus-client-pov-recovery",1949 "cumulus-client-pov-recovery",
19541971
1955[[package]]1972[[package]]
1956name = "cumulus-client-consensus-proposer"1973name = "cumulus-client-consensus-proposer"
1957version = "0.1.0"1974version = "0.4.0"
1958source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"1975source = "registry+https://github.com/rust-lang/crates.io-index"
1976checksum = "23a859c95a853e37c642b613be517d3d9c410a67204a5bd92eb35c5daaffa44d"
1959dependencies = [1977dependencies = [
1960 "anyhow",1978 "anyhow",
1961 "async-trait",1979 "async-trait",
19691987
1970[[package]]1988[[package]]
1971name = "cumulus-client-network"1989name = "cumulus-client-network"
1972version = "0.1.0"1990version = "0.4.0"
1973source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"1991source = "registry+https://github.com/rust-lang/crates.io-index"
1992checksum = "fac979caafb16a47493dfce7509decadad81f982c0110473ab69389af663678d"
1974dependencies = [1993dependencies = [
1975 "async-trait",1994 "async-trait",
1976 "cumulus-relay-chain-interface",1995 "cumulus-relay-chain-interface",
19922011
1993[[package]]2012[[package]]
1994name = "cumulus-client-pov-recovery"2013name = "cumulus-client-pov-recovery"
1995version = "0.1.0"2014version = "0.4.0"
1996source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2015source = "registry+https://github.com/rust-lang/crates.io-index"
2016checksum = "e4031cda3e64955d57166068a27d544f46f4a9e4c14268a09d8b67eeac7fc51d"
1997dependencies = [2017dependencies = [
1998 "async-trait",2018 "async-trait",
1999 "cumulus-primitives-core",2019 "cumulus-primitives-core",
20162036
2017[[package]]2037[[package]]
2018name = "cumulus-client-service"2038name = "cumulus-client-service"
2019version = "0.1.0"2039version = "0.4.0"
2020source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2040source = "registry+https://github.com/rust-lang/crates.io-index"
2041checksum = "a72ee1a2276f11243b905676b60b77ca981c567cbed3795455b464502c3d4cb8"
2021dependencies = [2042dependencies = [
2022 "cumulus-client-cli",2043 "cumulus-client-cli",
2023 "cumulus-client-collator",2044 "cumulus-client-collator",
20512072
2052[[package]]2073[[package]]
2053name = "cumulus-pallet-aura-ext"2074name = "cumulus-pallet-aura-ext"
2054version = "0.1.0"2075version = "0.4.0"
2055source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2076source = "registry+https://github.com/rust-lang/crates.io-index"
2077checksum = "071cdddd31e2b0d47a74249675de828857f61eb5f6afa36cfcf63ea6ee2b60f2"
2056dependencies = [2078dependencies = [
2057 "cumulus-pallet-parachain-system",2079 "cumulus-pallet-parachain-system",
2058 "frame-support",2080 "frame-support",
20692091
2070[[package]]2092[[package]]
2071name = "cumulus-pallet-dmp-queue"2093name = "cumulus-pallet-dmp-queue"
2072version = "0.1.0"2094version = "0.4.0"
2073source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2095source = "registry+https://github.com/rust-lang/crates.io-index"
2096checksum = "5d1cb9d43cdfeedea19b4f6b8386e5b6264a97938b29f5c711a84e9dc7105ff7"
2074dependencies = [2097dependencies = [
2075 "cumulus-primitives-core",2098 "cumulus-primitives-core",
2076 "frame-support",2099 "frame-support",
20862109
2087[[package]]2110[[package]]
2088name = "cumulus-pallet-parachain-system"2111name = "cumulus-pallet-parachain-system"
2089version = "0.1.0"2112version = "0.4.1"
2090source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2113source = "registry+https://github.com/rust-lang/crates.io-index"
2114checksum = "d20d2280051998fcf113f04d25d4b39f27b449570b6350fdfb7e92541cb0aae7"
2091dependencies = [2115dependencies = [
2092 "bytes",2116 "bytes",
2093 "cumulus-pallet-parachain-system-proc-macro",2117 "cumulus-pallet-parachain-system-proc-macro",
2100 "log",2124 "log",
2101 "parity-scale-codec",2125 "parity-scale-codec",
2102 "polkadot-parachain-primitives",2126 "polkadot-parachain-primitives",
2127 "polkadot-runtime-parachains",
2103 "scale-info",2128 "scale-info",
2104 "sp-core",2129 "sp-core",
2105 "sp-externalities",2130 "sp-externalities",
2111 "sp-trie",2136 "sp-trie",
2112 "sp-version",2137 "sp-version",
2113 "staging-xcm",2138 "staging-xcm",
2114 "trie-db",2139 "trie-db 0.28.0",
2115]2140]
21162141
2117[[package]]2142[[package]]
2118name = "cumulus-pallet-parachain-system-proc-macro"2143name = "cumulus-pallet-parachain-system-proc-macro"
2119version = "0.1.0"2144version = "0.4.0"
2120source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2145source = "registry+https://github.com/rust-lang/crates.io-index"
2146checksum = "84baea20d10325b2501b6fa06d4a7902a43d6a6c62c71b5309e75c3ad8ae1441"
2121dependencies = [2147dependencies = [
2122 "proc-macro-crate",2148 "proc-macro-crate 1.3.1",
2123 "proc-macro2",2149 "proc-macro2",
2124 "quote",2150 "quote",
2125 "syn 2.0.37",2151 "syn 2.0.39",
2126]2152]
21272153
2128[[package]]2154[[package]]
2129name = "cumulus-pallet-xcm"2155name = "cumulus-pallet-xcm"
2130version = "0.1.0"2156version = "0.4.0"
2131source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2157source = "registry+https://github.com/rust-lang/crates.io-index"
2158checksum = "4ff03e14a0f5847bdee67a673ee945d3acd5c1d7238d46993208dcbfb774e27f"
2132dependencies = [2159dependencies = [
2133 "cumulus-primitives-core",2160 "cumulus-primitives-core",
2134 "frame-support",2161 "frame-support",
21432170
2144[[package]]2171[[package]]
2145name = "cumulus-pallet-xcmp-queue"2172name = "cumulus-pallet-xcmp-queue"
2146version = "0.1.0"2173version = "0.4.0"
2147source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2174source = "registry+https://github.com/rust-lang/crates.io-index"
2175checksum = "b6af9816dd6564149729ba133c2c984c88fb15c4a2cb66f57be06b9147744e51"
2148dependencies = [2176dependencies = [
2177 "bp-xcm-bridge-hub-router",
2149 "cumulus-primitives-core",2178 "cumulus-primitives-core",
2150 "frame-benchmarking",2179 "frame-benchmarking",
2151 "frame-support",2180 "frame-support",
2152 "frame-system",2181 "frame-system",
2153 "log",2182 "log",
2154 "parity-scale-codec",2183 "parity-scale-codec",
2155 "polkadot-runtime-common",2184 "polkadot-runtime-common",
2185 "polkadot-runtime-parachains",
2156 "rand_chacha 0.3.1",2186 "rand_chacha 0.3.1",
2157 "scale-info",2187 "scale-info",
2188 "sp-core",
2158 "sp-io",2189 "sp-io",
2159 "sp-runtime",2190 "sp-runtime",
2160 "sp-std",2191 "sp-std",
21642195
2165[[package]]2196[[package]]
2166name = "cumulus-primitives-aura"2197name = "cumulus-primitives-aura"
2167version = "0.1.0"2198version = "0.4.0"
2168source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2199source = "registry+https://github.com/rust-lang/crates.io-index"
2200checksum = "51c2ecd2393555e89245676fd49003fdc68dc7aa108f83f8c5ff5f8936ce5543"
2169dependencies = [2201dependencies = [
2170 "parity-scale-codec",2202 "parity-scale-codec",
2171 "polkadot-core-primitives",2203 "polkadot-core-primitives",
21782210
2179[[package]]2211[[package]]
2180name = "cumulus-primitives-core"2212name = "cumulus-primitives-core"
2181version = "0.1.0"2213version = "0.4.0"
2182source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2214source = "registry+https://github.com/rust-lang/crates.io-index"
2215checksum = "d40f62add2352287be4cb58b0017a91f61d953e2c6d2777c20d93185558196e1"
2183dependencies = [2216dependencies = [
2184 "parity-scale-codec",2217 "parity-scale-codec",
2185 "polkadot-core-primitives",2218 "polkadot-core-primitives",
21952228
2196[[package]]2229[[package]]
2197name = "cumulus-primitives-parachain-inherent"2230name = "cumulus-primitives-parachain-inherent"
2198version = "0.1.0"2231version = "0.4.0"
2199source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2232source = "registry+https://github.com/rust-lang/crates.io-index"
2233checksum = "9d0b1e0e6dcf393dbf05b31122a8c4739acf407a96ec8fd707886f36ee95c355"
2200dependencies = [2234dependencies = [
2201 "async-trait",2235 "async-trait",
2202 "cumulus-primitives-core",2236 "cumulus-primitives-core",
22182252
2219[[package]]2253[[package]]
2220name = "cumulus-primitives-timestamp"2254name = "cumulus-primitives-timestamp"
2221version = "0.1.0"2255version = "0.4.0"
2222source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2256source = "registry+https://github.com/rust-lang/crates.io-index"
2257checksum = "771ef4a34f7bcd4e8782f73d8dbd0df031b1c1c82e54b06af69f88df2cddc316"
2223dependencies = [2258dependencies = [
2224 "cumulus-primitives-core",2259 "cumulus-primitives-core",
2225 "futures",2260 "futures",
22312266
2232[[package]]2267[[package]]
2233name = "cumulus-primitives-utility"2268name = "cumulus-primitives-utility"
2234version = "0.1.0"2269version = "0.4.0"
2235source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2270source = "registry+https://github.com/rust-lang/crates.io-index"
2271checksum = "6b4ef704f5a346711d0448f82e57dc5784b186f4bf5e3efbbca0df814b203539"
2236dependencies = [2272dependencies = [
2237 "cumulus-primitives-core",2273 "cumulus-primitives-core",
2238 "frame-support",2274 "frame-support",
2239 "log",2275 "log",
2276 "pallet-xcm-benchmarks",
2240 "parity-scale-codec",2277 "parity-scale-codec",
2241 "polkadot-runtime-common",2278 "polkadot-runtime-common",
2279 "polkadot-runtime-parachains",
2242 "sp-io",2280 "sp-io",
2243 "sp-runtime",2281 "sp-runtime",
2244 "sp-std",2282 "sp-std",
22492287
2250[[package]]2288[[package]]
2251name = "cumulus-relay-chain-inprocess-interface"2289name = "cumulus-relay-chain-inprocess-interface"
2252version = "0.1.0"2290version = "0.4.0"
2253source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2291source = "registry+https://github.com/rust-lang/crates.io-index"
2292checksum = "9518b7440b3f887433058b000a564e06b6799fd6d2776f4d035b2802c67742eb"
2254dependencies = [2293dependencies = [
2255 "async-trait",2294 "async-trait",
2256 "cumulus-primitives-core",2295 "cumulus-primitives-core",
22732312
2274[[package]]2313[[package]]
2275name = "cumulus-relay-chain-interface"2314name = "cumulus-relay-chain-interface"
2276version = "0.1.0"2315version = "0.4.0"
2277source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2316source = "registry+https://github.com/rust-lang/crates.io-index"
2317checksum = "af081ef8885042e7ae96e9d1cf32ec6f0616fe4cb78f0325ed7c5accded687fb"
2278dependencies = [2318dependencies = [
2279 "async-trait",2319 "async-trait",
2280 "cumulus-primitives-core",2320 "cumulus-primitives-core",
22912331
2292[[package]]2332[[package]]
2293name = "cumulus-relay-chain-minimal-node"2333name = "cumulus-relay-chain-minimal-node"
2294version = "0.1.0"2334version = "0.4.0"
2295source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2335source = "registry+https://github.com/rust-lang/crates.io-index"
2336checksum = "69a1635ecc0bc20e7907a559983c818e4130ecfd899635e831f3f9b93966082c"
2296dependencies = [2337dependencies = [
2297 "array-bytes",2338 "array-bytes 6.2.0",
2298 "async-trait",2339 "async-trait",
2299 "cumulus-primitives-core",2340 "cumulus-primitives-core",
2300 "cumulus-relay-chain-interface",2341 "cumulus-relay-chain-interface",
2316 "sc-service",2357 "sc-service",
2317 "sc-tracing",2358 "sc-tracing",
2318 "sc-utils",2359 "sc-utils",
2319 "schnellru",
2320 "sp-api",2360 "sp-api",
2321 "sp-consensus",2361 "sp-consensus",
2322 "sp-consensus-babe",2362 "sp-consensus-babe",
2323 "sp-runtime",2363 "sp-runtime",
2364 "substrate-prometheus-endpoint",
2324 "tracing",2365 "tracing",
2325]2366]
23262367
2327[[package]]2368[[package]]
2328name = "cumulus-relay-chain-rpc-interface"2369name = "cumulus-relay-chain-rpc-interface"
2329version = "0.1.0"2370version = "0.4.0"
2330source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2371source = "registry+https://github.com/rust-lang/crates.io-index"
2372checksum = "ce507996b8e97e07e3687c1c55159b38f56b2550b476c727114ab2e7ad7b2bf1"
2331dependencies = [2373dependencies = [
2332 "async-trait",2374 "async-trait",
2333 "cumulus-primitives-core",2375 "cumulus-primitives-core",
23642406
2365[[package]]2407[[package]]
2366name = "cumulus-test-relay-sproof-builder"2408name = "cumulus-test-relay-sproof-builder"
2367version = "0.1.0"2409version = "0.4.0"
2368source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"2410source = "registry+https://github.com/rust-lang/crates.io-index"
2411checksum = "59b921a9cb6758faa1c739f135fd87aa1e10a4e86a1c1db3119b396a62287cf2"
2369dependencies = [2412dependencies = [
2370 "cumulus-primitives-core",2413 "cumulus-primitives-core",
2371 "parity-scale-codec",2414 "parity-scale-codec",
2385 "byteorder",2428 "byteorder",
2386 "digest 0.8.1",2429 "digest 0.8.1",
2387 "rand_core 0.5.1",2430 "rand_core 0.5.1",
2388 "subtle",2431 "subtle 2.4.1",
2389 "zeroize",2432 "zeroize",
2390]2433]
23912434
2398 "byteorder",2441 "byteorder",
2399 "digest 0.9.0",2442 "digest 0.9.0",
2400 "rand_core 0.5.1",2443 "rand_core 0.5.1",
2401 "subtle",2444 "subtle 2.4.1",
2402 "zeroize",2445 "zeroize",
2403]2446]
24042447
2415 "fiat-crypto",2458 "fiat-crypto",
2416 "platforms",2459 "platforms",
2417 "rustc_version",2460 "rustc_version",
2418 "subtle",2461 "subtle 2.4.1",
2419 "zeroize",2462 "zeroize",
2420]2463]
24212464
2422[[package]]2465[[package]]
2423name = "curve25519-dalek-derive"2466name = "curve25519-dalek-derive"
2424version = "0.1.0"2467version = "0.1.1"
2425source = "registry+https://github.com/rust-lang/crates.io-index"2468source = "registry+https://github.com/rust-lang/crates.io-index"
2426checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"2469checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
2427dependencies = [2470dependencies = [
2428 "proc-macro2",2471 "proc-macro2",
2429 "quote",2472 "quote",
2430 "syn 2.0.37",2473 "syn 2.0.39",
2431]2474]
24322475
2433[[package]]2476[[package]]
24452488
2446[[package]]2489[[package]]
2447name = "cxx"2490name = "cxx"
2448version = "1.0.107"2491version = "1.0.110"
2449source = "registry+https://github.com/rust-lang/crates.io-index"2492source = "registry+https://github.com/rust-lang/crates.io-index"
2450checksum = "bbe98ba1789d56fb3db3bee5e032774d4f421b685de7ba703643584ba24effbe"2493checksum = "7129e341034ecb940c9072817cd9007974ea696844fc4dd582dc1653a7fbe2e8"
2451dependencies = [2494dependencies = [
2452 "cc",2495 "cc",
2453 "cxxbridge-flags",2496 "cxxbridge-flags",
24572500
2458[[package]]2501[[package]]
2459name = "cxx-build"2502name = "cxx-build"
2460version = "1.0.107"2503version = "1.0.110"
2461source = "registry+https://github.com/rust-lang/crates.io-index"2504source = "registry+https://github.com/rust-lang/crates.io-index"
2462checksum = "c4ce20f6b8433da4841b1dadfb9468709868022d829d5ca1f2ffbda928455ea3"2505checksum = "a2a24f3f5f8eed71936f21e570436f024f5c2e25628f7496aa7ccd03b90109d5"
2463dependencies = [2506dependencies = [
2464 "cc",2507 "cc",
2465 "codespan-reporting",2508 "codespan-reporting",
2466 "once_cell",2509 "once_cell",
2467 "proc-macro2",2510 "proc-macro2",
2468 "quote",2511 "quote",
2469 "scratch",2512 "scratch",
2470 "syn 2.0.37",2513 "syn 2.0.39",
2471]2514]
24722515
2473[[package]]2516[[package]]
2474name = "cxxbridge-flags"2517name = "cxxbridge-flags"
2475version = "1.0.107"2518version = "1.0.110"
2476source = "registry+https://github.com/rust-lang/crates.io-index"2519source = "registry+https://github.com/rust-lang/crates.io-index"
2477checksum = "20888d9e1d2298e2ff473cee30efe7d5036e437857ab68bbfea84c74dba91da2"2520checksum = "06fdd177fc61050d63f67f5bd6351fac6ab5526694ea8e359cd9cd3b75857f44"
24782521
2479[[package]]2522[[package]]
2480name = "cxxbridge-macro"2523name = "cxxbridge-macro"
2481version = "1.0.107"2524version = "1.0.110"
2482source = "registry+https://github.com/rust-lang/crates.io-index"2525source = "registry+https://github.com/rust-lang/crates.io-index"
2483checksum = "2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84"2526checksum = "587663dd5fb3d10932c8aecfe7c844db1bcf0aee93eeab08fac13dc1212c2e7f"
2484dependencies = [2527dependencies = [
2485 "proc-macro2",2528 "proc-macro2",
2486 "quote",2529 "quote",
2487 "syn 2.0.37",2530 "syn 2.0.39",
2488]2531]
24892532
2490[[package]]2533[[package]]
25992642
2600[[package]]2643[[package]]
2601name = "deranged"2644name = "deranged"
2602version = "0.3.8"2645version = "0.3.9"
2603source = "registry+https://github.com/rust-lang/crates.io-index"2646source = "registry+https://github.com/rust-lang/crates.io-index"
2604checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"2647checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
2648dependencies = [
2649 "powerfmt",
2650]
26052651
2606[[package]]2652[[package]]
2607name = "derivative"2653name = "derivative"
2702 "block-buffer 0.10.4",2748 "block-buffer 0.10.4",
2703 "const-oid",2749 "const-oid",
2704 "crypto-common",2750 "crypto-common",
2705 "subtle",2751 "subtle 2.4.1",
2706]2752]
27072753
2708[[package]]2754[[package]]
2709name = "directories"2755name = "directories"
2710version = "4.0.1"2756version = "5.0.1"
2711source = "registry+https://github.com/rust-lang/crates.io-index"2757source = "registry+https://github.com/rust-lang/crates.io-index"
2712checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210"2758checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
2713dependencies = [2759dependencies = [
2714 "dirs-sys",2760 "dirs-sys",
2715]2761]
27262772
2727[[package]]2773[[package]]
2728name = "dirs-sys"2774name = "dirs-sys"
2729version = "0.3.7"2775version = "0.4.1"
2730source = "registry+https://github.com/rust-lang/crates.io-index"2776source = "registry+https://github.com/rust-lang/crates.io-index"
2731checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"2777checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
2732dependencies = [2778dependencies = [
2733 "libc",2779 "libc",
2780 "option-ext",
2734 "redox_users",2781 "redox_users",
2735 "winapi",2782 "windows-sys 0.48.0",
2736]2783]
27372784
2738[[package]]2785[[package]]
2754dependencies = [2801dependencies = [
2755 "proc-macro2",2802 "proc-macro2",
2756 "quote",2803 "quote",
2757 "syn 2.0.37",2804 "syn 2.0.39",
2758]2805]
27592806
2760[[package]]2807[[package]]
2761name = "dleq_vrf"
2762version = "0.0.2"
2763source = "git+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1"
2764dependencies = [
2765 "ark-ec",
2766 "ark-ff",
2767 "ark-scale 0.0.10",
2768 "ark-secret-scalar",
2769 "ark-serialize",
2770 "ark-std",
2771 "ark-transcript",
2772 "arrayvec 0.7.4",
2773 "rand_core 0.6.4",
2774 "zeroize",
2775]
2776
2777[[package]]
2778name = "docify"2808name = "docify"
2779version = "0.2.4"2809version = "0.2.6"
2780source = "registry+https://github.com/rust-lang/crates.io-index"2810source = "registry+https://github.com/rust-lang/crates.io-index"
2781checksum = "76ee528c501ddd15d5181997e9518e59024844eac44fd1e40cb20ddb2a8562fa"2811checksum = "4235e9b248e2ba4b92007fe9c646f3adf0ffde16dc74713eacc92b8bc58d8d2f"
2782dependencies = [2812dependencies = [
2783 "docify_macros",2813 "docify_macros",
2784]2814]
27852815
2786[[package]]2816[[package]]
2787name = "docify_macros"2817name = "docify_macros"
2788version = "0.2.4"2818version = "0.2.6"
2789source = "registry+https://github.com/rust-lang/crates.io-index"2819source = "registry+https://github.com/rust-lang/crates.io-index"
2790checksum = "0ca01728ab2679c464242eca99f94e2ce0514b52ac9ad950e2ed03fca991231c"2820checksum = "47020e12d7c7505670d1363dd53d6c23724f71a90a3ae32ff8eba40de8404626"
2791dependencies = [2821dependencies = [
2792 "common-path",2822 "common-path",
2793 "derive-syn-parse",2823 "derive-syn-parse",
2794 "once_cell",2824 "once_cell",
2795 "proc-macro2",2825 "proc-macro2",
2796 "quote",2826 "quote",
2797 "regex",2827 "regex",
2798 "syn 2.0.37",2828 "syn 2.0.39",
2799 "termcolor",2829 "termcolor",
2800 "toml 0.7.8",2830 "toml 0.7.8",
2801 "walkdir",2831 "walkdir",
28422872
2843[[package]]2873[[package]]
2844name = "dyn-clone"2874name = "dyn-clone"
2845version = "1.0.14"2875version = "1.0.16"
2846source = "registry+https://github.com/rust-lang/crates.io-index"2876source = "registry+https://github.com/rust-lang/crates.io-index"
2847checksum = "23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcd"2877checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
28482878
2849[[package]]2879[[package]]
2850name = "ecdsa"2880name = "ecdsa"
28602890
2861[[package]]2891[[package]]
2862name = "ecdsa"2892name = "ecdsa"
2863version = "0.16.8"2893version = "0.16.9"
2864source = "registry+https://github.com/rust-lang/crates.io-index"2894source = "registry+https://github.com/rust-lang/crates.io-index"
2865checksum = "a4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4"2895checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
2866dependencies = [2896dependencies = [
2867 "der 0.7.8",2897 "der 0.7.8",
2868 "digest 0.10.7",2898 "digest 0.10.7",
2869 "elliptic-curve 0.13.5",2899 "elliptic-curve 0.13.8",
2870 "rfc6979 0.4.0",2900 "rfc6979 0.4.0",
2871 "signature 2.1.0",2901 "signature 2.2.0",
2872 "spki 0.7.2",2902 "spki 0.7.2",
2873]2903]
28742904
2875[[package]]2905[[package]]
2876name = "ed25519"2906name = "ed25519"
2877version = "2.2.2"2907version = "2.2.3"
2878source = "registry+https://github.com/rust-lang/crates.io-index"2908source = "registry+https://github.com/rust-lang/crates.io-index"
2879checksum = "60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1d"2909checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
2880dependencies = [2910dependencies = [
2881 "pkcs8 0.10.2",2911 "pkcs8 0.10.2",
2882 "signature 2.1.0",2912 "signature 2.2.0",
2883]2913]
28842914
2885[[package]]2915[[package]]
2886name = "ed25519-dalek"2916name = "ed25519-dalek"
2887version = "2.0.0"2917version = "2.1.0"
2888source = "registry+https://github.com/rust-lang/crates.io-index"2918source = "registry+https://github.com/rust-lang/crates.io-index"
2889checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980"2919checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0"
2890dependencies = [2920dependencies = [
2891 "curve25519-dalek 4.1.1",2921 "curve25519-dalek 4.1.1",
2892 "ed25519",2922 "ed25519",
2893 "rand_core 0.6.4",2923 "rand_core 0.6.4",
2894 "serde",2924 "serde",
2895 "sha2 0.10.8",2925 "sha2 0.10.8",
2926 "subtle 2.4.1",
2896 "zeroize",2927 "zeroize",
2897]2928]
28982929
2918dependencies = [2949dependencies = [
2919 "curve25519-dalek 4.1.1",2950 "curve25519-dalek 4.1.1",
2920 "ed25519",2951 "ed25519",
2921 "hashbrown 0.14.1",2952 "hashbrown 0.14.2",
2922 "hex",2953 "hex",
2923 "rand_core 0.6.4",2954 "rand_core 0.6.4",
2924 "sha2 0.10.8",2955 "sha2 0.10.8",
2949 "pkcs8 0.9.0",2980 "pkcs8 0.9.0",
2950 "rand_core 0.6.4",2981 "rand_core 0.6.4",
2951 "sec1 0.3.0",2982 "sec1 0.3.0",
2952 "subtle",2983 "subtle 2.4.1",
2953 "zeroize",2984 "zeroize",
2954]2985]
29552986
2956[[package]]2987[[package]]
2957name = "elliptic-curve"2988name = "elliptic-curve"
2958version = "0.13.5"2989version = "0.13.8"
2959source = "registry+https://github.com/rust-lang/crates.io-index"2990source = "registry+https://github.com/rust-lang/crates.io-index"
2960checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"2991checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
2961dependencies = [2992dependencies = [
2962 "base16ct 0.2.0",2993 "base16ct 0.2.0",
2963 "crypto-bigint 0.5.3",2994 "crypto-bigint 0.5.5",
2964 "digest 0.10.7",2995 "digest 0.10.7",
2965 "ff 0.13.0",2996 "ff 0.13.0",
2966 "generic-array 0.14.7",2997 "generic-array 0.14.7",
2967 "group 0.13.0",2998 "group 0.13.0",
2968 "pkcs8 0.10.2",2999 "pkcs8 0.10.2",
2969 "rand_core 0.6.4",3000 "rand_core 0.6.4",
2970 "sec1 0.7.3",3001 "sec1 0.7.3",
2971 "subtle",3002 "subtle 2.4.1",
2972 "zeroize",3003 "zeroize",
2973]3004]
29743005
3007dependencies = [3038dependencies = [
3008 "proc-macro2",3039 "proc-macro2",
3009 "quote",3040 "quote",
3010 "syn 2.0.37",3041 "syn 2.0.39",
3011]3042]
30123043
3013[[package]]3044[[package]]
3018dependencies = [3049dependencies = [
3019 "proc-macro2",3050 "proc-macro2",
3020 "quote",3051 "quote",
3021 "syn 2.0.37",3052 "syn 2.0.39",
3022]3053]
30233054
3024[[package]]3055[[package]]
3025name = "env_logger"3056name = "env_logger"
3026version = "0.9.3"3057version = "0.10.1"
3027source = "registry+https://github.com/rust-lang/crates.io-index"3058source = "registry+https://github.com/rust-lang/crates.io-index"
3028checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"3059checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
3029dependencies = [3060dependencies = [
3030 "atty",
3031 "humantime",3061 "humantime",
3032 "log",
3033 "regex",
3034 "termcolor",
3035]
3036
3037[[package]]
3038name = "env_logger"
3039version = "0.10.0"
3040source = "registry+https://github.com/rust-lang/crates.io-index"
3041checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
3042dependencies = [
3043 "humantime",
3044 "is-terminal",3062 "is-terminal",
3045 "log",3063 "log",
3046 "regex",3064 "regex",
30613079
3062[[package]]3080[[package]]
3063name = "errno"3081name = "errno"
3064version = "0.3.4"3082version = "0.3.7"
3065source = "registry+https://github.com/rust-lang/crates.io-index"3083source = "registry+https://github.com/rust-lang/crates.io-index"
3066checksum = "add4f07d43996f76ef320709726a556a9d4f965d9410d8d0271132d2f8293480"3084checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
3067dependencies = [3085dependencies = [
3068 "errno-dragonfly",
3069 "libc",3086 "libc",
3070 "windows-sys 0.48.0",3087 "windows-sys 0.48.0",
3071]3088]
30723089
3073[[package]]3090[[package]]
3074name = "errno-dragonfly"
3075version = "0.1.2"
3076source = "registry+https://github.com/rust-lang/crates.io-index"
3077checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
3078dependencies = [
3079 "cc",
3080 "libc",
3081]
3082
3083[[package]]
3084name = "ethbloom"3091name = "ethbloom"
3085version = "0.13.0"3092version = "0.13.0"
3086source = "registry+https://github.com/rust-lang/crates.io-index"3093source = "registry+https://github.com/rust-lang/crates.io-index"
3136checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"3143checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
31373144
3138[[package]]3145[[package]]
3146name = "event-listener"
3147version = "3.1.0"
3148source = "registry+https://github.com/rust-lang/crates.io-index"
3149checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2"
3150dependencies = [
3151 "concurrent-queue",
3152 "parking",
3153 "pin-project-lite 0.2.13",
3154]
3155
3156[[package]]
3157name = "event-listener-strategy"
3158version = "0.3.0"
3159source = "registry+https://github.com/rust-lang/crates.io-index"
3160checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160"
3161dependencies = [
3162 "event-listener 3.1.0",
3163 "pin-project-lite 0.2.13",
3164]
3165
3166[[package]]
3139name = "evm"3167name = "evm"
3140version = "0.39.1"3168version = "0.39.1"
3141source = "git+https://github.com/rust-blockchain/evm?rev=b7b82c7e1fc57b7449d6dfa6826600de37cc1e65#b7b82c7e1fc57b7449d6dfa6826600de37cc1e65"3169source = "git+https://github.com/rust-blockchain/evm?rev=b7b82c7e1fc57b7449d6dfa6826600de37cc1e65#b7b82c7e1fc57b7449d6dfa6826600de37cc1e65"
32483276
3249[[package]]3277[[package]]
3250name = "expander"3278name = "expander"
3251version = "0.0.6"
3252source = "registry+https://github.com/rust-lang/crates.io-index"
3253checksum = "3774182a5df13c3d1690311ad32fbe913feef26baba609fa2dd5f72042bd2ab6"
3254dependencies = [
3255 "blake2",
3256 "fs-err",
3257 "proc-macro2",
3258 "quote",
3259]
3260
3261[[package]]
3262name = "expander"
3263version = "2.0.0"3279version = "2.0.0"
3264source = "registry+https://github.com/rust-lang/crates.io-index"3280source = "registry+https://github.com/rust-lang/crates.io-index"
3265checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7"3281checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7"
3266dependencies = [3282dependencies = [
3267 "blake2",3283 "blake2 0.10.6",
3268 "fs-err",3284 "fs-err",
3269 "proc-macro2",3285 "proc-macro2",
3270 "quote",3286 "quote",
3271 "syn 2.0.37",3287 "syn 2.0.39",
3272]3288]
32733289
3274[[package]]3290[[package]]
3316dependencies = [3332dependencies = [
3317 "expander 0.0.4",3333 "expander 0.0.4",
3318 "indexmap 1.9.3",3334 "indexmap 1.9.3",
3319 "proc-macro-crate",3335 "proc-macro-crate 1.3.1",
3320 "proc-macro2",3336 "proc-macro2",
3321 "quote",3337 "quote",
3322 "syn 1.0.109",3338 "syn 1.0.109",
3326[[package]]3342[[package]]
3327name = "fc-api"3343name = "fc-api"
3328version = "1.0.0-dev"3344version = "1.0.0-dev"
3329source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3345source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3330dependencies = [3346dependencies = [
3331 "async-trait",3347 "async-trait",
3332 "fp-storage",3348 "fp-storage",
3338[[package]]3354[[package]]
3339name = "fc-consensus"3355name = "fc-consensus"
3340version = "2.0.0-dev"3356version = "2.0.0-dev"
3341source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3357source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3342dependencies = [3358dependencies = [
3343 "async-trait",3359 "async-trait",
3344 "fp-consensus",3360 "fp-consensus",
3354[[package]]3370[[package]]
3355name = "fc-db"3371name = "fc-db"
3356version = "2.0.0-dev"3372version = "2.0.0-dev"
3357source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3373source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3358dependencies = [3374dependencies = [
3359 "async-trait",3375 "async-trait",
3360 "fc-api",3376 "fc-api",
3375[[package]]3391[[package]]
3376name = "fc-mapping-sync"3392name = "fc-mapping-sync"
3377version = "2.0.0-dev"3393version = "2.0.0-dev"
3378source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3394source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3379dependencies = [3395dependencies = [
3380 "fc-db",3396 "fc-db",
3381 "fc-storage",3397 "fc-storage",
3396[[package]]3412[[package]]
3397name = "fc-rpc"3413name = "fc-rpc"
3398version = "2.0.0-dev"3414version = "2.0.0-dev"
3399source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3415source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3400dependencies = [3416dependencies = [
3401 "ethereum",3417 "ethereum",
3402 "ethereum-types",3418 "ethereum-types",
3450[[package]]3466[[package]]
3451name = "fc-rpc-core"3467name = "fc-rpc-core"
3452version = "1.1.0-dev"3468version = "1.1.0-dev"
3453source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3469source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3454dependencies = [3470dependencies = [
3455 "ethereum",3471 "ethereum",
3456 "ethereum-types",3472 "ethereum-types",
3463[[package]]3479[[package]]
3464name = "fc-storage"3480name = "fc-storage"
3465version = "1.0.0-dev"3481version = "1.0.0-dev"
3466source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3482source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3467dependencies = [3483dependencies = [
3468 "ethereum",3484 "ethereum",
3469 "ethereum-types",3485 "ethereum-types",
3494checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"3510checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
3495dependencies = [3511dependencies = [
3496 "rand_core 0.6.4",3512 "rand_core 0.6.4",
3497 "subtle",3513 "subtle 2.4.1",
3498]3514]
34993515
3500[[package]]3516[[package]]
3504checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"3520checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
3505dependencies = [3521dependencies = [
3506 "rand_core 0.6.4",3522 "rand_core 0.6.4",
3507 "subtle",3523 "subtle 2.4.1",
3508]3524]
35093525
3510[[package]]3526[[package]]
3511name = "fflonk"
3512version = "0.1.0"
3513source = "git+https://github.com/w3f/fflonk#26a5045b24e169cffc1f9328ca83d71061145c40"
3514dependencies = [
3515 "ark-ec",
3516 "ark-ff",
3517 "ark-poly",
3518 "ark-serialize",
3519 "ark-std",
3520 "merlin 3.0.0",
3521]
3522
3523[[package]]
3524name = "fiat-crypto"3527name = "fiat-crypto"
3525version = "0.2.1"3528version = "0.2.5"
3526source = "registry+https://github.com/rust-lang/crates.io-index"3529source = "registry+https://github.com/rust-lang/crates.io-index"
3527checksum = "d0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2d"3530checksum = "27573eac26f4dd11e2b1916c3fe1baa56407c83c71a773a8ba17ec0bca03b6b7"
35283531
3529[[package]]3532[[package]]
3530name = "file-per-thread-logger"3533name = "file-per-thread-logger"
3531version = "0.1.6"3534version = "0.1.6"
3532source = "registry+https://github.com/rust-lang/crates.io-index"3535source = "registry+https://github.com/rust-lang/crates.io-index"
3533checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866"3536checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866"
3534dependencies = [3537dependencies = [
3535 "env_logger 0.10.0",3538 "env_logger",
3536 "log",3539 "log",
3537]3540]
35383541
35843587
3585[[package]]3588[[package]]
3586name = "flate2"3589name = "flate2"
3587version = "1.0.27"3590version = "1.0.28"
3588source = "registry+https://github.com/rust-lang/crates.io-index"3591source = "registry+https://github.com/rust-lang/crates.io-index"
3589checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"3592checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
3590dependencies = [3593dependencies = [
3591 "crc32fast",3594 "crc32fast",
3592 "libz-sys",3595 "libz-sys",
36103613
3611[[package]]3614[[package]]
3612name = "fork-tree"3615name = "fork-tree"
3613version = "3.0.0"3616version = "11.0.0"
3614source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3617source = "registry+https://github.com/rust-lang/crates.io-index"
3618checksum = "1c2d0a4310dcf0e5cce78e35e60dc2fda80ef61c8f8fc382e685dfc24fcf5db9"
3615dependencies = [3619dependencies = [
3616 "parity-scale-codec",3620 "parity-scale-codec",
3617]3621]
3628[[package]]3632[[package]]
3629name = "fp-account"3633name = "fp-account"
3630version = "1.0.0-dev"3634version = "1.0.0-dev"
3631source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3635source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3632dependencies = [3636dependencies = [
3633 "hex",3637 "hex",
3634 "impl-serde",3638 "impl-serde",
3647[[package]]3651[[package]]
3648name = "fp-consensus"3652name = "fp-consensus"
3649version = "2.0.0-dev"3653version = "2.0.0-dev"
3650source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3654source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3651dependencies = [3655dependencies = [
3652 "ethereum",3656 "ethereum",
3653 "parity-scale-codec",3657 "parity-scale-codec",
3659[[package]]3663[[package]]
3660name = "fp-ethereum"3664name = "fp-ethereum"
3661version = "1.0.0-dev"3665version = "1.0.0-dev"
3662source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3666source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3663dependencies = [3667dependencies = [
3664 "ethereum",3668 "ethereum",
3665 "ethereum-types",3669 "ethereum-types",
3672[[package]]3676[[package]]
3673name = "fp-evm"3677name = "fp-evm"
3674version = "3.0.0-dev"3678version = "3.0.0-dev"
3675source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3679source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3676dependencies = [3680dependencies = [
3677 "evm",3681 "evm",
3678 "frame-support",3682 "frame-support",
3688[[package]]3692[[package]]
3689name = "fp-rpc"3693name = "fp-rpc"
3690version = "3.0.0-dev"3694version = "3.0.0-dev"
3691source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3695source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3692dependencies = [3696dependencies = [
3693 "ethereum",3697 "ethereum",
3694 "ethereum-types",3698 "ethereum-types",
3705[[package]]3709[[package]]
3706name = "fp-self-contained"3710name = "fp-self-contained"
3707version = "1.0.0-dev"3711version = "1.0.0-dev"
3708source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3712source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3709dependencies = [3713dependencies = [
3710 "frame-support",3714 "frame-support",
3711 "parity-scale-codec",3715 "parity-scale-codec",
3717[[package]]3721[[package]]
3718name = "fp-storage"3722name = "fp-storage"
3719version = "2.0.0"3723version = "2.0.0"
3720source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"3724source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
3721dependencies = [3725dependencies = [
3722 "parity-scale-codec",3726 "parity-scale-codec",
3723 "serde",3727 "serde",
37313735
3732[[package]]3736[[package]]
3733name = "frame-benchmarking"3737name = "frame-benchmarking"
3734version = "4.0.0-dev"3738version = "25.0.0"
3735source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3739source = "registry+https://github.com/rust-lang/crates.io-index"
3740checksum = "3dd4946d63eab00d899f08a7e74e965cc6785c2298efaea6a2752905f4810407"
3736dependencies = [3741dependencies = [
3737 "frame-support",3742 "frame-support",
3738 "frame-support-procedural",3743 "frame-support-procedural",
37563761
3757[[package]]3762[[package]]
3758name = "frame-benchmarking-cli"3763name = "frame-benchmarking-cli"
3759version = "4.0.0-dev"3764version = "29.0.0"
3760source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3765source = "registry+https://github.com/rust-lang/crates.io-index"
3766checksum = "67e51c371bff90ba44767a79e72a036d7d648cee621cd2fe9f693e8c1d62941e"
3761dependencies = [3767dependencies = [
3762 "Inflector",3768 "Inflector",
3763 "array-bytes",3769 "array-bytes 6.2.0",
3764 "chrono",3770 "chrono",
3765 "clap",3771 "clap",
3766 "comfy-table",3772 "comfy-table",
38043810
3805[[package]]3811[[package]]
3806name = "frame-election-provider-solution-type"3812name = "frame-election-provider-solution-type"
3807version = "4.0.0-dev"3813version = "12.0.0"
3808source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3814source = "registry+https://github.com/rust-lang/crates.io-index"
3815checksum = "03911cf3675af64252a6de7b4f383eafa80d5ea5830184e7a0739aeb0b95272d"
3809dependencies = [3816dependencies = [
3810 "proc-macro-crate",3817 "proc-macro-crate 1.3.1",
3811 "proc-macro2",3818 "proc-macro2",
3812 "quote",3819 "quote",
3813 "syn 2.0.37",3820 "syn 2.0.39",
3814]3821]
38153822
3816[[package]]3823[[package]]
3817name = "frame-election-provider-support"3824name = "frame-election-provider-support"
3818version = "4.0.0-dev"3825version = "25.0.0"
3819source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3826source = "registry+https://github.com/rust-lang/crates.io-index"
3827checksum = "ebad507fb038db2f7ce982d30bd9828a59785c9a4780348d59cd6cceaee80d1a"
3820dependencies = [3828dependencies = [
3821 "frame-election-provider-solution-type",3829 "frame-election-provider-solution-type",
3822 "frame-support",3830 "frame-support",
38323840
3833[[package]]3841[[package]]
3834name = "frame-executive"3842name = "frame-executive"
3835version = "4.0.0-dev"3843version = "25.0.0"
3836source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3844source = "registry+https://github.com/rust-lang/crates.io-index"
3845checksum = "2dda2c20ea3267ee20c9a5482f320236510c4ade6aec1dd930cb57dc5651c64f"
3837dependencies = [3846dependencies = [
3838 "frame-support",3847 "frame-support",
3839 "frame-system",3848 "frame-system",
38623871
3863[[package]]3872[[package]]
3864name = "frame-remote-externalities"3873name = "frame-remote-externalities"
3865version = "0.10.0-dev"3874version = "0.32.0"
3866source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3875source = "registry+https://github.com/rust-lang/crates.io-index"
3876checksum = "a30013df51f4d4e58472c4fecdbfeb141234ece5f6355e5b3a3e51d3f87d452d"
3867dependencies = [3877dependencies = [
3868 "async-recursion",
3869 "futures",3878 "futures",
3870 "indicatif",3879 "indicatif",
3871 "jsonrpsee",3880 "jsonrpsee",
38843893
3885[[package]]3894[[package]]
3886name = "frame-support"3895name = "frame-support"
3887version = "4.0.0-dev"3896version = "25.0.0"
3888source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3897source = "registry+https://github.com/rust-lang/crates.io-index"
3898checksum = "023504bbdd0e8d1ebe3d9d289b009337cdb9a24c5e74615ffd7b188aa1664c2d"
3889dependencies = [3899dependencies = [
3890 "aquamarine",3900 "aquamarine",
3891 "bitflags 1.3.2",3901 "bitflags 1.3.2",
39243934
3925[[package]]3935[[package]]
3926name = "frame-support-procedural"3936name = "frame-support-procedural"
3927version = "4.0.0-dev"3937version = "20.0.0"
3928source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3938source = "registry+https://github.com/rust-lang/crates.io-index"
3939checksum = "1d6bc383298353ff2790ac1a301262c21ac196dbc26ef67a2213c46524a06dd1"
3929dependencies = [3940dependencies = [
3930 "Inflector",3941 "Inflector",
3931 "cfg-expr",3942 "cfg-expr",
3937 "proc-macro-warning",3948 "proc-macro-warning",
3938 "proc-macro2",3949 "proc-macro2",
3939 "quote",3950 "quote",
3940 "syn 2.0.37",3951 "sp-core-hashing",
3952 "syn 2.0.39",
3941]3953]
39423954
3943[[package]]3955[[package]]
3944name = "frame-support-procedural-tools"3956name = "frame-support-procedural-tools"
3945version = "4.0.0-dev"3957version = "9.0.0"
3946source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3958source = "registry+https://github.com/rust-lang/crates.io-index"
3959checksum = "b3ac1266522a8c9a2d2d26d205ec3028b88582d5f3cd5cbc75d0ec8271d197b7"
3947dependencies = [3960dependencies = [
3948 "frame-support-procedural-tools-derive",3961 "frame-support-procedural-tools-derive",
3949 "proc-macro-crate",3962 "proc-macro-crate 1.3.1",
3950 "proc-macro2",3963 "proc-macro2",
3951 "quote",3964 "quote",
3952 "syn 2.0.37",3965 "syn 2.0.39",
3953]3966]
39543967
3955[[package]]3968[[package]]
3956name = "frame-support-procedural-tools-derive"3969name = "frame-support-procedural-tools-derive"
3957version = "3.0.0"3970version = "10.0.0"
3958source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3971source = "registry+https://github.com/rust-lang/crates.io-index"
3972checksum = "d9c078db2242ea7265faa486004e7fd8daaf1a577cfcac0070ce55d926922883"
3959dependencies = [3973dependencies = [
3960 "proc-macro2",3974 "proc-macro2",
3961 "quote",3975 "quote",
3962 "syn 2.0.37",3976 "syn 2.0.39",
3963]3977]
39643978
3965[[package]]3979[[package]]
3966name = "frame-system"3980name = "frame-system"
3967version = "4.0.0-dev"3981version = "25.0.0"
3968source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"3982source = "registry+https://github.com/rust-lang/crates.io-index"
3983checksum = "57e316407c45a5093c833966a906301aa0dcbd05048061cd9cde2548d017bfd9"
3969dependencies = [3984dependencies = [
3970 "cfg-if",3985 "cfg-if",
3971 "frame-support",3986 "frame-support",
39833998
3984[[package]]3999[[package]]
3985name = "frame-system-benchmarking"4000name = "frame-system-benchmarking"
3986version = "4.0.0-dev"4001version = "25.0.0"
3987source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"4002source = "registry+https://github.com/rust-lang/crates.io-index"
4003checksum = "b5b1388055d29a7a1c4d41b1623d3fcbc9d7f31d17abe04500b270b26901d926"
3988dependencies = [4004dependencies = [
3989 "frame-benchmarking",4005 "frame-benchmarking",
3990 "frame-support",4006 "frame-support",
39984014
3999[[package]]4015[[package]]
4000name = "frame-system-rpc-runtime-api"4016name = "frame-system-rpc-runtime-api"
4001version = "4.0.0-dev"4017version = "23.0.0"
4002source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"4018source = "registry+https://github.com/rust-lang/crates.io-index"
4019checksum = "17572a34fd866ad6cab6977a2c30b38645e0a499b3486de00ae9103f7002d6d3"
4003dependencies = [4020dependencies = [
4004 "parity-scale-codec",4021 "parity-scale-codec",
4005 "sp-api",4022 "sp-api",
4006]4023]
40074024
4008[[package]]4025[[package]]
4009name = "frame-try-runtime"4026name = "frame-try-runtime"
4010version = "0.10.0-dev"4027version = "0.31.0"
4011source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"4028source = "registry+https://github.com/rust-lang/crates.io-index"
4029checksum = "f082e770275f9b46ddf46b09bc7a993f84db691c39d9e4d038ac07443cb17a18"
4012dependencies = [4030dependencies = [
4013 "frame-support",4031 "frame-support",
4014 "parity-scale-codec",4032 "parity-scale-codec",
40194037
4020[[package]]4038[[package]]
4021name = "fs-err"4039name = "fs-err"
4022version = "2.9.0"4040version = "2.11.0"
4023source = "registry+https://github.com/rust-lang/crates.io-index"4041source = "registry+https://github.com/rust-lang/crates.io-index"
4024checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"4042checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41"
4043dependencies = [
4044 "autocfg",
4045]
40254046
4026[[package]]4047[[package]]
4027name = "fs2"4048name = "fs2"
4039source = "registry+https://github.com/rust-lang/crates.io-index"4060source = "registry+https://github.com/rust-lang/crates.io-index"
4040checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47"4061checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47"
4041dependencies = [4062dependencies = [
4042 "rustix 0.38.15",4063 "rustix 0.38.25",
4043 "windows-sys 0.48.0",4064 "windows-sys 0.48.0",
4044]4065]
40454066
40514072
4052[[package]]4073[[package]]
4053name = "futures"4074name = "futures"
4054version = "0.3.28"4075version = "0.3.29"
4055source = "registry+https://github.com/rust-lang/crates.io-index"4076source = "registry+https://github.com/rust-lang/crates.io-index"
4056checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"4077checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
4057dependencies = [4078dependencies = [
4058 "futures-channel",4079 "futures-channel",
4059 "futures-core",4080 "futures-core",
40664087
4067[[package]]4088[[package]]
4068name = "futures-channel"4089name = "futures-channel"
4069version = "0.3.28"4090version = "0.3.29"
4070source = "registry+https://github.com/rust-lang/crates.io-index"4091source = "registry+https://github.com/rust-lang/crates.io-index"
4071checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"4092checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
4072dependencies = [4093dependencies = [
4073 "futures-core",4094 "futures-core",
4074 "futures-sink",4095 "futures-sink",
4075]4096]
40764097
4077[[package]]4098[[package]]
4078name = "futures-core"4099name = "futures-core"
4079version = "0.3.28"4100version = "0.3.29"
4080source = "registry+https://github.com/rust-lang/crates.io-index"4101source = "registry+https://github.com/rust-lang/crates.io-index"
4081checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"4102checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
40824103
4083[[package]]4104[[package]]
4084name = "futures-executor"4105name = "futures-executor"
4085version = "0.3.28"4106version = "0.3.29"
4086source = "registry+https://github.com/rust-lang/crates.io-index"4107source = "registry+https://github.com/rust-lang/crates.io-index"
4087checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"4108checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
4088dependencies = [4109dependencies = [
4089 "futures-core",4110 "futures-core",
4090 "futures-task",4111 "futures-task",
40944115
4095[[package]]4116[[package]]
4096name = "futures-io"4117name = "futures-io"
4097version = "0.3.28"4118version = "0.3.29"
4098source = "registry+https://github.com/rust-lang/crates.io-index"4119source = "registry+https://github.com/rust-lang/crates.io-index"
4099checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"4120checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
41004121
4101[[package]]4122[[package]]
4102name = "futures-lite"4123name = "futures-lite"
4114]4135]
41154136
4116[[package]]4137[[package]]
4138name = "futures-lite"
4139version = "2.0.1"
4140source = "registry+https://github.com/rust-lang/crates.io-index"
4141checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb"
4142dependencies = [
4143 "fastrand 2.0.1",
4144 "futures-core",
4145 "futures-io",
4146 "memchr",
4147 "parking",
4148 "pin-project-lite 0.2.13",
4149]
4150
4151[[package]]
4117name = "futures-macro"4152name = "futures-macro"
4118version = "0.3.28"4153version = "0.3.29"
4119source = "registry+https://github.com/rust-lang/crates.io-index"4154source = "registry+https://github.com/rust-lang/crates.io-index"
4120checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"4155checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
4121dependencies = [4156dependencies = [
4122 "proc-macro2",4157 "proc-macro2",
4123 "quote",4158 "quote",
4124 "syn 2.0.37",4159 "syn 2.0.39",
4125]4160]
41264161
4127[[package]]4162[[package]]
4132dependencies = [4167dependencies = [
4133 "futures-io",4168 "futures-io",
4134 "rustls 0.20.9",4169 "rustls 0.20.9",
4135 "webpki 0.22.2",4170 "webpki 0.22.4",
4136]4171]
41374172
4138[[package]]4173[[package]]
4139name = "futures-sink"4174name = "futures-sink"
4140version = "0.3.28"4175version = "0.3.29"
4141source = "registry+https://github.com/rust-lang/crates.io-index"4176source = "registry+https://github.com/rust-lang/crates.io-index"
4142checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"4177checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
41434178
4144[[package]]4179[[package]]
4145name = "futures-task"4180name = "futures-task"
4146version = "0.3.28"4181version = "0.3.29"
4147source = "registry+https://github.com/rust-lang/crates.io-index"4182source = "registry+https://github.com/rust-lang/crates.io-index"
4148checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"4183checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
41494184
4150[[package]]4185[[package]]
4151name = "futures-timer"4186name = "futures-timer"
41554190
4156[[package]]4191[[package]]
4157name = "futures-util"4192name = "futures-util"
4158version = "0.3.28"4193version = "0.3.29"
4159source = "registry+https://github.com/rust-lang/crates.io-index"4194source = "registry+https://github.com/rust-lang/crates.io-index"
4160checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"4195checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
4161dependencies = [4196dependencies = [
4162 "futures-channel",4197 "futures-channel",
4163 "futures-core",4198 "futures-core",
42234258
4224[[package]]4259[[package]]
4225name = "getrandom"4260name = "getrandom"
4226version = "0.2.10"4261version = "0.2.11"
4227source = "registry+https://github.com/rust-lang/crates.io-index"4262source = "registry+https://github.com/rust-lang/crates.io-index"
4228checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"4263checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
4229dependencies = [4264dependencies = [
4230 "cfg-if",4265 "cfg-if",
4231 "libc",4266 "libc",
4296dependencies = [4331dependencies = [
4297 "ff 0.12.1",4332 "ff 0.12.1",
4298 "rand_core 0.6.4",4333 "rand_core 0.6.4",
4299 "subtle",4334 "subtle 2.4.1",
4300]4335]
43014336
4302[[package]]4337[[package]]
4307dependencies = [4342dependencies = [
4308 "ff 0.13.0",4343 "ff 0.13.0",
4309 "rand_core 0.6.4",4344 "rand_core 0.6.4",
4310 "subtle",4345 "subtle 2.4.1",
4311]4346]
43124347
4313[[package]]4348[[package]]
4314name = "h2"4349name = "h2"
4315version = "0.3.21"4350version = "0.3.22"
4316source = "registry+https://github.com/rust-lang/crates.io-index"4351source = "registry+https://github.com/rust-lang/crates.io-index"
4317checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"4352checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
4318dependencies = [4353dependencies = [
4319 "bytes",4354 "bytes",
4320 "fnv",4355 "fnv",
4321 "futures-core",4356 "futures-core",
4322 "futures-sink",4357 "futures-sink",
4323 "futures-util",4358 "futures-util",
4324 "http",4359 "http",
4325 "indexmap 1.9.3",4360 "indexmap 2.1.0",
4326 "slab",4361 "slab",
4327 "tokio",4362 "tokio",
4328 "tokio-util",4363 "tokio-util",
43314366
4332[[package]]4367[[package]]
4333name = "handlebars"4368name = "handlebars"
4334version = "4.4.0"4369version = "4.5.0"
4335source = "registry+https://github.com/rust-lang/crates.io-index"4370source = "registry+https://github.com/rust-lang/crates.io-index"
4336checksum = "c39b3bc2a8f715298032cf5087e58573809374b08160aa7d750582bdb82d2683"4371checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225"
4337dependencies = [4372dependencies = [
4338 "log",4373 "log",
4339 "pest",4374 "pest",
4370source = "registry+https://github.com/rust-lang/crates.io-index"4405source = "registry+https://github.com/rust-lang/crates.io-index"
4371checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"4406checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
4372dependencies = [4407dependencies = [
4373 "ahash 0.7.6",4408 "ahash 0.7.7",
4374]4409]
43754410
4376[[package]]4411[[package]]
4379source = "registry+https://github.com/rust-lang/crates.io-index"4414source = "registry+https://github.com/rust-lang/crates.io-index"
4380checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"4415checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
4381dependencies = [4416dependencies = [
4382 "ahash 0.8.3",4417 "ahash 0.8.6",
4383]4418]
43844419
4385[[package]]4420[[package]]
4386name = "hashbrown"4421name = "hashbrown"
4387version = "0.14.1"4422version = "0.14.2"
4388source = "registry+https://github.com/rust-lang/crates.io-index"4423source = "registry+https://github.com/rust-lang/crates.io-index"
4389checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"4424checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
4390dependencies = [4425dependencies = [
4391 "ahash 0.8.3",4426 "ahash 0.8.6",
4392 "allocator-api2",4427 "allocator-api2",
4393 "serde",4428 "serde",
4394]4429]
43954430
4396[[package]]4431[[package]]
4432name = "hashlink"
4433version = "0.8.4"
4434source = "registry+https://github.com/rust-lang/crates.io-index"
4435checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
4436dependencies = [
4437 "hashbrown 0.14.2",
4438]
4439
4440[[package]]
4397name = "heck"4441name = "heck"
4398version = "0.4.1"4442version = "0.4.1"
4399source = "registry+https://github.com/rust-lang/crates.io-index"4443source = "registry+https://github.com/rust-lang/crates.io-index"
44974541
4498[[package]]4542[[package]]
4499name = "http"4543name = "http"
4500version = "0.2.9"4544version = "0.2.11"
4501source = "registry+https://github.com/rust-lang/crates.io-index"4545source = "registry+https://github.com/rust-lang/crates.io-index"
4502checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"4546checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
4503dependencies = [4547dependencies = [
4504 "bytes",4548 "bytes",
4505 "fnv",4549 "fnv",
4558 "httpdate",4602 "httpdate",
4559 "itoa",4603 "itoa",
4560 "pin-project-lite 0.2.13",4604 "pin-project-lite 0.2.13",
4561 "socket2 0.4.9",4605 "socket2 0.4.10",
4562 "tokio",4606 "tokio",
4563 "tower-service",4607 "tower-service",
4564 "tracing",4608 "tracing",
45674611
4568[[package]]4612[[package]]
4569name = "hyper-rustls"4613name = "hyper-rustls"
4570version = "0.24.1"4614version = "0.24.2"
4571source = "registry+https://github.com/rust-lang/crates.io-index"4615source = "registry+https://github.com/rust-lang/crates.io-index"
4572checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"4616checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
4573dependencies = [4617dependencies = [
4574 "futures-util",4618 "futures-util",
4575 "http",4619 "http",
4576 "hyper",4620 "hyper",
4577 "log",4621 "log",
4578 "rustls 0.21.7",4622 "rustls 0.21.9",
4579 "rustls-native-certs",4623 "rustls-native-certs",
4580 "tokio",4624 "tokio",
4581 "tokio-rustls",4625 "tokio-rustls",
4582 "webpki-roots 0.23.1",4626 "webpki-roots 0.25.2",
4583]4627]
45844628
4585[[package]]4629[[package]]
4586name = "iana-time-zone"4630name = "iana-time-zone"
4587version = "0.1.57"4631version = "0.1.58"
4588source = "registry+https://github.com/rust-lang/crates.io-index"4632source = "registry+https://github.com/rust-lang/crates.io-index"
4589checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"4633checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
4590dependencies = [4634dependencies = [
4591 "android_system_properties",4635 "android_system_properties",
4592 "core-foundation-sys",4636 "core-foundation-sys",
4593 "iana-time-zone-haiku",4637 "iana-time-zone-haiku",
4594 "js-sys",4638 "js-sys",
4595 "wasm-bindgen",4639 "wasm-bindgen",
4596 "windows 0.48.0",4640 "windows-core",
4597]4641]
45984642
4599[[package]]4643[[package]]
46444688
4645[[package]]4689[[package]]
4646name = "if-watch"4690name = "if-watch"
4647version = "3.0.1"4691version = "3.1.0"
4648source = "registry+https://github.com/rust-lang/crates.io-index"4692source = "registry+https://github.com/rust-lang/crates.io-index"
4649checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f"4693checksum = "bbb892e5777fe09e16f3d44de7802f4daa7267ecbe8c466f19d94e25bb0c303e"
4650dependencies = [4694dependencies = [
4651 "async-io",4695 "async-io 1.13.0",
4652 "core-foundation",4696 "core-foundation",
4653 "fnv",4697 "fnv",
4654 "futures",4698 "futures",
4658 "rtnetlink",4702 "rtnetlink",
4659 "system-configuration",4703 "system-configuration",
4660 "tokio",4704 "tokio",
4661 "windows 0.34.0",4705 "windows",
4662]4706]
46634707
4664[[package]]4708[[package]]
47314775
4732[[package]]4776[[package]]
4733name = "indexmap"4777name = "indexmap"
4734version = "2.0.2"4778version = "2.1.0"
4735source = "registry+https://github.com/rust-lang/crates.io-index"4779source = "registry+https://github.com/rust-lang/crates.io-index"
4736checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"4780checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
4737dependencies = [4781dependencies = [
4738 "equivalent",4782 "equivalent",
4739 "hashbrown 0.14.1",4783 "hashbrown 0.14.2",
4740]4784]
47414785
4742[[package]]4786[[package]]
4833source = "registry+https://github.com/rust-lang/crates.io-index"4877source = "registry+https://github.com/rust-lang/crates.io-index"
4834checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"4878checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
4835dependencies = [4879dependencies = [
4836 "socket2 0.5.4",4880 "socket2 0.5.5",
4837 "widestring",4881 "widestring",
4838 "windows-sys 0.48.0",4882 "windows-sys 0.48.0",
4839 "winreg",4883 "winreg",
4840]4884]
48414885
4842[[package]]4886[[package]]
4843name = "ipnet"4887name = "ipnet"
4844version = "2.8.0"4888version = "2.9.0"
4845source = "registry+https://github.com/rust-lang/crates.io-index"4889source = "registry+https://github.com/rust-lang/crates.io-index"
4846checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"4890checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
48474891
4848[[package]]4892[[package]]
4849name = "is-terminal"4893name = "is-terminal"
4852checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"4896checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
4853dependencies = [4897dependencies = [
4854 "hermit-abi 0.3.3",4898 "hermit-abi 0.3.3",
4855 "rustix 0.38.15",4899 "rustix 0.38.25",
4856 "windows-sys 0.48.0",4900 "windows-sys 0.48.0",
4857]4901]
48584902
48914935
4892[[package]]4936[[package]]
4893name = "jobserver"4937name = "jobserver"
4894version = "0.1.26"4938version = "0.1.27"
4895source = "registry+https://github.com/rust-lang/crates.io-index"4939source = "registry+https://github.com/rust-lang/crates.io-index"
4896checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"4940checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
4897dependencies = [4941dependencies = [
4898 "libc",4942 "libc",
4899]4943]
49004944
4901[[package]]4945[[package]]
4902name = "js-sys"4946name = "js-sys"
4903version = "0.3.64"4947version = "0.3.65"
4904source = "registry+https://github.com/rust-lang/crates.io-index"4948source = "registry+https://github.com/rust-lang/crates.io-index"
4905checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"4949checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
4906dependencies = [4950dependencies = [
4907 "wasm-bindgen",4951 "wasm-bindgen",
4908]4952]
4951dependencies = [4995dependencies = [
4952 "anyhow",4996 "anyhow",
4953 "arrayvec 0.7.4",4997 "arrayvec 0.7.4",
4954 "async-lock",4998 "async-lock 2.8.0",
4955 "async-trait",4999 "async-trait",
4956 "beef",5000 "beef",
4957 "futures-channel",5001 "futures-channel",
4997checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a"5041checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a"
4998dependencies = [5042dependencies = [
4999 "heck",5043 "heck",
5000 "proc-macro-crate",5044 "proc-macro-crate 1.3.1",
5001 "proc-macro2",5045 "proc-macro2",
5002 "quote",5046 "quote",
5003 "syn 1.0.109",5047 "syn 1.0.109",
50535097
5054[[package]]5098[[package]]
5055name = "k256"5099name = "k256"
5056version = "0.13.1"5100version = "0.13.2"
5057source = "registry+https://github.com/rust-lang/crates.io-index"5101source = "registry+https://github.com/rust-lang/crates.io-index"
5058checksum = "cadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bcc"5102checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b"
5059dependencies = [5103dependencies = [
5060 "cfg-if",5104 "cfg-if",
5061 "ecdsa 0.16.8",5105 "ecdsa 0.16.9",
5062 "elliptic-curve 0.13.5",5106 "elliptic-curve 0.13.8",
5063 "once_cell",5107 "once_cell",
5064 "sha2 0.10.8",5108 "sha2 0.10.8",
5065]5109]
5074]5118]
50755119
5076[[package]]5120[[package]]
5077name = "kusama-runtime-constants"5121name = "keystream"
5078version = "1.0.0"5122version = "1.0.0"
5079source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"5123source = "registry+https://github.com/rust-lang/crates.io-index"
5080dependencies = [5124checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28"
5081 "frame-support",
5082 "polkadot-primitives",
5083 "polkadot-runtime-common",
5084 "smallvec",
5085 "sp-core",
5086 "sp-runtime",
5087 "sp-weights",
5088]
50895125
5090[[package]]5126[[package]]
5091name = "kvdb"5127name = "kvdb"
51225158
5123[[package]]5159[[package]]
5124name = "landlock"5160name = "landlock"
5125version = "0.2.0"5161version = "0.3.0"
5126source = "registry+https://github.com/rust-lang/crates.io-index"5162source = "registry+https://github.com/rust-lang/crates.io-index"
5127checksum = "520baa32708c4e957d2fc3a186bc5bd8d26637c33137f399ddfc202adb240068"5163checksum = "1530c5b973eeed4ac216af7e24baf5737645a6272e361f1fb95710678b67d9cc"
5128dependencies = [5164dependencies = [
5129 "enumflags2",5165 "enumflags2",
5130 "libc",5166 "libc",
51455181
5146[[package]]5182[[package]]
5147name = "libc"5183name = "libc"
5148version = "0.2.148"5184version = "0.2.150"
5149source = "registry+https://github.com/rust-lang/crates.io-index"5185source = "registry+https://github.com/rust-lang/crates.io-index"
5150checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"5186checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
51515187
5152[[package]]5188[[package]]
5153name = "libloading"5189name = "libloading"
51615197
5162[[package]]5198[[package]]
5163name = "libm"5199name = "libm"
5164version = "0.2.7"5200version = "0.2.8"
5165source = "registry+https://github.com/rust-lang/crates.io-index"5201source = "registry+https://github.com/rust-lang/crates.io-index"
5166checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"5202checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
51675203
5168[[package]]5204[[package]]
5169name = "libp2p"5205name = "libp2p"
5174 "bytes",5210 "bytes",
5175 "futures",5211 "futures",
5176 "futures-timer",5212 "futures-timer",
5177 "getrandom 0.2.10",5213 "getrandom 0.2.11",
5178 "instant",5214 "instant",
5179 "libp2p-allow-block-list",5215 "libp2p-allow-block-list",
5180 "libp2p-connection-limits",5216 "libp2p-connection-limits",
5348 "log",5384 "log",
5349 "rand 0.8.5",5385 "rand 0.8.5",
5350 "smallvec",5386 "smallvec",
5351 "socket2 0.4.9",5387 "socket2 0.4.10",
5352 "tokio",5388 "tokio",
5353 "trust-dns-proto",5389 "trust-dns-proto",
5354 "void",5390 "void",
5490 "libc",5526 "libc",
5491 "libp2p-core",5527 "libp2p-core",
5492 "log",5528 "log",
5493 "socket2 0.4.9",5529 "socket2 0.4.10",
5494 "tokio",5530 "tokio",
5495]5531]
54965532
5508 "ring 0.16.20",5544 "ring 0.16.20",
5509 "rustls 0.20.9",5545 "rustls 0.20.9",
5510 "thiserror",5546 "thiserror",
5511 "webpki 0.22.2",5547 "webpki 0.22.4",
5512 "x509-parser 0.14.0",5548 "x509-parser 0.14.0",
5513 "yasna",5549 "yasna",
5514]5550]
5591]5627]
55925628
5593[[package]]5629[[package]]
5630name = "libredox"
5631version = "0.0.1"
5632source = "registry+https://github.com/rust-lang/crates.io-index"
5633checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
5634dependencies = [
5635 "bitflags 2.4.1",
5636 "libc",
5637 "redox_syscall 0.4.1",
5638]
5639
5640[[package]]
5594name = "librocksdb-sys"5641name = "librocksdb-sys"
5595version = "0.11.0+8.1.1"5642version = "0.11.0+8.1.1"
5596source = "registry+https://github.com/rust-lang/crates.io-index"5643source = "registry+https://github.com/rust-lang/crates.io-index"
5632dependencies = [5679dependencies = [
5633 "crunchy",5680 "crunchy",
5634 "digest 0.9.0",5681 "digest 0.9.0",
5635 "subtle",5682 "subtle 2.4.1",
5636]5683]
56375684
5638[[package]]5685[[package]]
57115758
5712[[package]]5759[[package]]
5713name = "linux-raw-sys"5760name = "linux-raw-sys"
5714version = "0.4.8"5761version = "0.4.11"
5715source = "registry+https://github.com/rust-lang/crates.io-index"5762source = "registry+https://github.com/rust-lang/crates.io-index"
5716checksum = "3852614a3bd9ca9804678ba6be5e3b8ce76dfc902cae004e3e0c44051b6e88db"5763checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
57175764
5718[[package]]5765[[package]]
5766name = "lioness"
5767version = "0.1.2"
5768source = "registry+https://github.com/rust-lang/crates.io-index"
5769checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9"
5770dependencies = [
5771 "arrayref",
5772 "blake2 0.8.1",
5773 "chacha",
5774 "keystream",
5775]
5776
5777[[package]]
5719name = "lock_api"5778name = "lock_api"
5720version = "0.4.10"5779version = "0.4.11"
5721source = "registry+https://github.com/rust-lang/crates.io-index"5780source = "registry+https://github.com/rust-lang/crates.io-index"
5722checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"5781checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
5723dependencies = [5782dependencies = [
5724 "autocfg",5783 "autocfg",
5725 "scopeguard",5784 "scopeguard",
57865845
5787[[package]]5846[[package]]
5788name = "macro_magic"5847name = "macro_magic"
5789version = "0.4.2"5848version = "0.5.0"
5790source = "registry+https://github.com/rust-lang/crates.io-index"5849source = "registry+https://github.com/rust-lang/crates.io-index"
5791checksum = "aee866bfee30d2d7e83835a4574aad5b45adba4cc807f2a3bbba974e5d4383c9"5850checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d"
5792dependencies = [5851dependencies = [
5793 "macro_magic_core",5852 "macro_magic_core",
5794 "macro_magic_macros",5853 "macro_magic_macros",
5795 "quote",5854 "quote",
5796 "syn 2.0.37",5855 "syn 2.0.39",
5797]5856]
57985857
5799[[package]]5858[[package]]
5800name = "macro_magic_core"5859name = "macro_magic_core"
5801version = "0.4.2"5860version = "0.5.0"
5802source = "registry+https://github.com/rust-lang/crates.io-index"5861source = "registry+https://github.com/rust-lang/crates.io-index"
5803checksum = "7e766a20fd9c72bab3e1e64ed63f36bd08410e75803813df210d1ce297d7ad00"5862checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d"
5804dependencies = [5863dependencies = [
5805 "const-random",5864 "const-random",
5806 "derive-syn-parse",5865 "derive-syn-parse",
5807 "macro_magic_core_macros",5866 "macro_magic_core_macros",
5808 "proc-macro2",5867 "proc-macro2",
5809 "quote",5868 "quote",
5810 "syn 2.0.37",5869 "syn 2.0.39",
5811]5870]
58125871
5813[[package]]5872[[package]]
5814name = "macro_magic_core_macros"5873name = "macro_magic_core_macros"
5815version = "0.4.2"5874version = "0.5.0"
5816source = "registry+https://github.com/rust-lang/crates.io-index"5875source = "registry+https://github.com/rust-lang/crates.io-index"
5817checksum = "c12469fc165526520dff2807c2975310ab47cf7190a45b99b49a7dc8befab17b"5876checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654"
5818dependencies = [5877dependencies = [
5819 "proc-macro2",5878 "proc-macro2",
5820 "quote",5879 "quote",
5821 "syn 2.0.37",5880 "syn 2.0.39",
5822]5881]
58235882
5824[[package]]5883[[package]]
5825name = "macro_magic_macros"5884name = "macro_magic_macros"
5826version = "0.4.2"5885version = "0.5.0"
5827source = "registry+https://github.com/rust-lang/crates.io-index"5886source = "registry+https://github.com/rust-lang/crates.io-index"
5828checksum = "b8fb85ec1620619edf2984a7693497d4ec88a9665d8b87e942856884c92dbf2a"5887checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3"
5829dependencies = [5888dependencies = [
5830 "macro_magic_core",5889 "macro_magic_core",
5831 "quote",5890 "quote",
5832 "syn 2.0.37",5891 "syn 2.0.39",
5833]5892]
58345893
5835[[package]]5894[[package]]
5891source = "registry+https://github.com/rust-lang/crates.io-index"5950source = "registry+https://github.com/rust-lang/crates.io-index"
5892checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64"5951checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64"
5893dependencies = [5952dependencies = [
5894 "rustix 0.38.15",5953 "rustix 0.38.25",
5895]5954]
58965955
5897[[package]]5956[[package]]
59916050
5992[[package]]6051[[package]]
5993name = "mio"6052name = "mio"
5994version = "0.8.8"6053version = "0.8.9"
5995source = "registry+https://github.com/rust-lang/crates.io-index"6054source = "registry+https://github.com/rust-lang/crates.io-index"
5996checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"6055checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
5997dependencies = [6056dependencies = [
5998 "libc",6057 "libc",
5999 "wasi 0.11.0+wasi-snapshot-preview1",6058 "wasi 0.11.0+wasi-snapshot-preview1",
6000 "windows-sys 0.48.0",6059 "windows-sys 0.48.0",
6001]6060]
60026061
6003[[package]]6062[[package]]
6063name = "mixnet"
6064version = "0.7.0"
6065source = "registry+https://github.com/rust-lang/crates.io-index"
6066checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a"
6067dependencies = [
6068 "arrayref",
6069 "arrayvec 0.7.4",
6070 "bitflags 1.3.2",
6071 "blake2 0.10.6",
6072 "c2-chacha",
6073 "curve25519-dalek 4.1.1",
6074 "either",
6075 "hashlink",
6076 "lioness",
6077 "log",
6078 "parking_lot 0.12.1",
6079 "rand 0.8.5",
6080 "rand_chacha 0.3.1",
6081 "rand_distr",
6082 "subtle 2.4.1",
6083 "thiserror",
6084 "zeroize",
6085]
6086
6087[[package]]
6004name = "mmr-gadget"6088name = "mmr-gadget"
6005version = "4.0.0-dev"6089version = "26.0.0"
6006source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6090source = "registry+https://github.com/rust-lang/crates.io-index"
6091checksum = "62eff76fd1de7bad43b0e9e666970ae11ef8c24f49622585362c21ae5470986f"
6007dependencies = [6092dependencies = [
6008 "futures",6093 "futures",
6009 "log",6094 "log",
60216106
6022[[package]]6107[[package]]
6023name = "mmr-rpc"6108name = "mmr-rpc"
6024version = "4.0.0-dev"6109version = "25.0.0"
6025source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6110source = "registry+https://github.com/rust-lang/crates.io-index"
6111checksum = "a387f061e68601d268aade23387eaaf6542e82b357ebc1f8d6a95a251b996d30"
6026dependencies = [6112dependencies = [
6027 "anyhow",6113 "anyhow",
6028 "jsonrpsee",6114 "jsonrpsee",
6115source = "registry+https://github.com/rust-lang/crates.io-index"6201source = "registry+https://github.com/rust-lang/crates.io-index"
6116checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd"6202checksum = "fc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcd"
6117dependencies = [6203dependencies = [
6118 "proc-macro-crate",6204 "proc-macro-crate 1.3.1",
6119 "proc-macro-error",6205 "proc-macro-error",
6120 "proc-macro2",6206 "proc-macro2",
6121 "quote",6207 "quote",
63516437
6352[[package]]6438[[package]]
6353name = "num-traits"6439name = "num-traits"
6354version = "0.2.16"6440version = "0.2.17"
6355source = "registry+https://github.com/rust-lang/crates.io-index"6441source = "registry+https://github.com/rust-lang/crates.io-index"
6356checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"6442checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
6357dependencies = [6443dependencies = [
6358 "autocfg",6444 "autocfg",
6445 "libm",
6359]6446]
63606447
6361[[package]]6448[[package]]
63706457
6371[[package]]6458[[package]]
6372name = "num_enum"6459name = "num_enum"
6373version = "0.7.0"6460version = "0.7.1"
6374source = "registry+https://github.com/rust-lang/crates.io-index"6461source = "registry+https://github.com/rust-lang/crates.io-index"
6375checksum = "70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0ceb"6462checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0"
6376dependencies = [6463dependencies = [
6377 "num_enum_derive",6464 "num_enum_derive",
6378]6465]
63796466
6380[[package]]6467[[package]]
6381name = "num_enum_derive"6468name = "num_enum_derive"
6382version = "0.7.0"6469version = "0.7.1"
6383source = "registry+https://github.com/rust-lang/crates.io-index"6470source = "registry+https://github.com/rust-lang/crates.io-index"
6384checksum = "56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597"6471checksum = "6c11e44798ad209ccdd91fc192f0526a369a01234f7373e1b141c96d7cee4f0e"
6385dependencies = [6472dependencies = [
6386 "proc-macro-crate",6473 "proc-macro-crate 2.0.0",
6387 "proc-macro2",6474 "proc-macro2",
6388 "quote",6475 "quote",
6389 "syn 2.0.37",6476 "syn 2.0.39",
6390]6477]
63916478
6392[[package]]6479[[package]]
64426529
6443[[package]]6530[[package]]
6444name = "opal-runtime"6531name = "opal-runtime"
6445version = "1.1.0"6532version = "1.2.0"
6446dependencies = [6533dependencies = [
6447 "app-promotion-rpc",6534 "app-promotion-rpc",
6448 "cumulus-pallet-aura-ext",6535 "cumulus-pallet-aura-ext",
6519 "pallet-unique",6606 "pallet-unique",
6520 "pallet-utility",6607 "pallet-utility",
6521 "pallet-xcm",6608 "pallet-xcm",
6522 "parachain-info",
6523 "parity-scale-codec",6609 "parity-scale-codec",
6524 "polkadot-parachain-primitives",6610 "polkadot-parachain-primitives",
6611 "polkadot-runtime-common",
6525 "precompile-utils-macro",6612 "precompile-utils-macro",
6526 "scale-info",6613 "scale-info",
6527 "serde",6614 "serde",
6540 "sp-storage",6627 "sp-storage",
6541 "sp-transaction-pool",6628 "sp-transaction-pool",
6542 "sp-version",6629 "sp-version",
6630 "staging-parachain-info",
6543 "staging-xcm",6631 "staging-xcm",
6544 "staging-xcm-builder",6632 "staging-xcm-builder",
6545 "staging-xcm-executor",6633 "staging-xcm-executor",
6570checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"6658checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
65716659
6572[[package]]6660[[package]]
6661name = "option-ext"
6662version = "0.2.0"
6663source = "registry+https://github.com/rust-lang/crates.io-index"
6664checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
6665
6666[[package]]
6573name = "orchestra"6667name = "orchestra"
6574version = "0.0.5"6668version = "0.3.3"
6575source = "registry+https://github.com/rust-lang/crates.io-index"6669source = "registry+https://github.com/rust-lang/crates.io-index"
6576checksum = "227585216d05ba65c7ab0a0450a3cf2cbd81a98862a54c4df8e14d5ac6adb015"6670checksum = "46d78e1deb2a8d54fc1f063a544130db4da31dfe4d5d3b493186424910222a76"
6577dependencies = [6671dependencies = [
6578 "async-trait",6672 "async-trait",
6579 "dyn-clonable",6673 "dyn-clonable",
65886682
6589[[package]]6683[[package]]
6590name = "orchestra-proc-macro"6684name = "orchestra-proc-macro"
6591version = "0.0.5"6685version = "0.3.3"
6592source = "registry+https://github.com/rust-lang/crates.io-index"6686source = "registry+https://github.com/rust-lang/crates.io-index"
6593checksum = "2871aadd82a2c216ee68a69837a526dfe788ecbe74c4c5038a6acdbff6653066"6687checksum = "d035b1f968d91a826f2e34a9d6d02cb2af5aa7ca39ebd27922d850ab4b2dd2c6"
6594dependencies = [6688dependencies = [
6595 "expander 0.0.6",6689 "expander 2.0.0",
6690 "indexmap 2.1.0",
6596 "itertools 0.10.5",6691 "itertools 0.11.0",
6597 "petgraph",6692 "petgraph",
6598 "proc-macro-crate",6693 "proc-macro-crate 1.3.1",
6599 "proc-macro2",6694 "proc-macro2",
6600 "quote",6695 "quote",
6601 "syn 1.0.109",6696 "syn 1.0.109",
66126707
6613[[package]]6708[[package]]
6614name = "orml-tokens"6709name = "orml-tokens"
6615version = "0.4.1-dev"6710version = "0.5.0-dev"
6616source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4"6711source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v1.3.0#6f36a9e79b75421ac56b259fd47d03db6c3e1603"
6617dependencies = [6712dependencies = [
6618 "frame-support",6713 "frame-support",
6619 "frame-system",6714 "frame-system",
66296724
6630[[package]]6725[[package]]
6631name = "orml-traits"6726name = "orml-traits"
6632version = "0.4.1-dev"6727version = "0.5.0-dev"
6633source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4"6728source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v1.3.0#6f36a9e79b75421ac56b259fd47d03db6c3e1603"
6634dependencies = [6729dependencies = [
6635 "frame-support",6730 "frame-support",
6636 "impl-trait-for-tuples",6731 "impl-trait-for-tuples",
66496744
6650[[package]]6745[[package]]
6651name = "orml-utilities"6746name = "orml-utilities"
6652version = "0.4.1-dev"6747version = "0.5.0-dev"
6653source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4"6748source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v1.3.0#6f36a9e79b75421ac56b259fd47d03db6c3e1603"
6654dependencies = [6749dependencies = [
6655 "frame-support",6750 "frame-support",
6656 "parity-scale-codec",6751 "parity-scale-codec",
66646759
6665[[package]]6760[[package]]
6666name = "orml-vesting"6761name = "orml-vesting"
6667version = "0.4.1-dev"6762version = "0.5.0-dev"
6668source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4"6763source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v1.3.0#6f36a9e79b75421ac56b259fd47d03db6c3e1603"
6669dependencies = [6764dependencies = [
6670 "frame-support",6765 "frame-support",
6671 "frame-system",6766 "frame-system",
66796774
6680[[package]]6775[[package]]
6681name = "orml-xcm-support"6776name = "orml-xcm-support"
6682version = "0.4.1-dev"6777version = "0.5.0-dev"
6683source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4"6778source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v1.3.0#6f36a9e79b75421ac56b259fd47d03db6c3e1603"
6684dependencies = [6779dependencies = [
6685 "frame-support",6780 "frame-support",
6686 "orml-traits",6781 "orml-traits",
66936788
6694[[package]]6789[[package]]
6695name = "orml-xtokens"6790name = "orml-xtokens"
6696version = "0.4.1-dev"6791version = "0.5.0-dev"
6697source = "git+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4"6792source = "git+https://github.com/uniquenetwork/open-runtime-module-library?branch=unique-polkadot-v1.3.0#6f36a9e79b75421ac56b259fd47d03db6c3e1603"
6698dependencies = [6793dependencies = [
6699 "cumulus-primitives-core",6794 "cumulus-primitives-core",
6700 "frame-support",6795 "frame-support",
6758]6853]
67596854
6760[[package]]6855[[package]]
6856name = "pallet-asset-rate"
6857version = "4.0.0"
6858source = "registry+https://github.com/rust-lang/crates.io-index"
6859checksum = "740aebbcfefe8528f56ff8a339f810520a28df3ec159d016ef719aaa9f131af4"
6860dependencies = [
6861 "frame-benchmarking",
6862 "frame-support",
6863 "frame-system",
6864 "parity-scale-codec",
6865 "scale-info",
6866 "sp-core",
6867 "sp-runtime",
6868 "sp-std",
6869]
6870
6871[[package]]
6761name = "pallet-aura"6872name = "pallet-aura"
6762version = "4.0.0-dev"6873version = "24.0.0"
6763source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6874source = "registry+https://github.com/rust-lang/crates.io-index"
6875checksum = "04fbef67cf62445b7fd8e68241e6b71d9fb8c77abb3d52259eebf525a4cd5586"
6764dependencies = [6876dependencies = [
6765 "frame-support",6877 "frame-support",
6766 "frame-system",6878 "frame-system",
67766888
6777[[package]]6889[[package]]
6778name = "pallet-authority-discovery"6890name = "pallet-authority-discovery"
6779version = "4.0.0-dev"6891version = "25.0.0"
6780source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6892source = "registry+https://github.com/rust-lang/crates.io-index"
6893checksum = "fda272a66bbf1602579efcede67606ac43cda6d462ad551c527d8cadc871813d"
6781dependencies = [6894dependencies = [
6782 "frame-support",6895 "frame-support",
6783 "frame-system",6896 "frame-system",
67926905
6793[[package]]6906[[package]]
6794name = "pallet-authorship"6907name = "pallet-authorship"
6795version = "4.0.0-dev"6908version = "25.0.0"
6796source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6909source = "registry+https://github.com/rust-lang/crates.io-index"
6910checksum = "2d38eab59f7d15fe43c81fc3cd92f4c1f895ca6d0efb74fc2a6d6d7d3d34d413"
6797dependencies = [6911dependencies = [
6798 "frame-support",6912 "frame-support",
6799 "frame-system",6913 "frame-system",
68066920
6807[[package]]6921[[package]]
6808name = "pallet-babe"6922name = "pallet-babe"
6809version = "4.0.0-dev"6923version = "25.0.0"
6810source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6924source = "registry+https://github.com/rust-lang/crates.io-index"
6925checksum = "6b12430ca4b79b27231acb1ff3f99d33d6503fbeba40bfc8380e42d59b6d52b0"
6811dependencies = [6926dependencies = [
6812 "frame-benchmarking",6927 "frame-benchmarking",
6813 "frame-support",6928 "frame-support",
68306945
6831[[package]]6946[[package]]
6832name = "pallet-bags-list"6947name = "pallet-bags-list"
6833version = "4.0.0-dev"6948version = "24.0.0"
6834source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6949source = "registry+https://github.com/rust-lang/crates.io-index"
6950checksum = "5d49c4448e51a5c64d63a4263aebeb2dfb90dabb48746e178b337fb7f533d45f"
6835dependencies = [6951dependencies = [
6836 "aquamarine",6952 "aquamarine",
6837 "docify",6953 "docify",
68526968
6853[[package]]6969[[package]]
6854name = "pallet-balances"6970name = "pallet-balances"
6855version = "4.0.0-dev"6971version = "25.0.0"
6856source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"6972source = "registry+https://github.com/rust-lang/crates.io-index"
6973checksum = "9de2915b425ae77d63ba25c194780599b7be25307454a138cfb316c16d001e68"
6857dependencies = [6974dependencies = [
6858 "frame-benchmarking",6975 "frame-benchmarking",
6859 "frame-support",6976 "frame-support",
6889[[package]]7006[[package]]
6890name = "pallet-base-fee"7007name = "pallet-base-fee"
6891version = "1.0.0"7008version = "1.0.0"
6892source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"7009source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
6893dependencies = [7010dependencies = [
6894 "fp-evm",7011 "fp-evm",
6895 "frame-support",7012 "frame-support",
69027019
6903[[package]]7020[[package]]
6904name = "pallet-beefy"7021name = "pallet-beefy"
6905version = "4.0.0-dev"7022version = "25.0.0"
6906source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7023source = "registry+https://github.com/rust-lang/crates.io-index"
7024checksum = "8563fce9fdb0e557015c0b58ed7ea7d5c1a4a1ddb1d27bf56e040d6bbf5c79e9"
6907dependencies = [7025dependencies = [
6908 "frame-support",7026 "frame-support",
6909 "frame-system",7027 "frame-system",
69227040
6923[[package]]7041[[package]]
6924name = "pallet-beefy-mmr"7042name = "pallet-beefy-mmr"
6925version = "4.0.0-dev"7043version = "25.0.0"
6926source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7044source = "registry+https://github.com/rust-lang/crates.io-index"
7045checksum = "ee3ed75c348ba23064cea40dab623719ef348bfe67ea39f195f82e2e7a7d0115"
6927dependencies = [7046dependencies = [
6928 "array-bytes",7047 "array-bytes 6.2.0",
6929 "binary-merkle-tree",7048 "binary-merkle-tree",
6930 "frame-support",7049 "frame-support",
6931 "frame-system",7050 "frame-system",
69477066
6948[[package]]7067[[package]]
6949name = "pallet-bounties"7068name = "pallet-bounties"
6950version = "4.0.0-dev"7069version = "24.0.0"
6951source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7070source = "registry+https://github.com/rust-lang/crates.io-index"
7071checksum = "74c0fb83c88f217e5bfe07a69a6d8a6c32d01241159ab81705ba5d4c3e24aaab"
6952dependencies = [7072dependencies = [
6953 "frame-benchmarking",7073 "frame-benchmarking",
6954 "frame-support",7074 "frame-support",
69657085
6966[[package]]7086[[package]]
6967name = "pallet-child-bounties"7087name = "pallet-child-bounties"
6968version = "4.0.0-dev"7088version = "24.0.0"
6969source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7089source = "registry+https://github.com/rust-lang/crates.io-index"
7090checksum = "2246ce705aee37f9b6ad818e3646910d31ef4191e1c234bff054a710ef8d8a38"
6970dependencies = [7091dependencies = [
6971 "frame-benchmarking",7092 "frame-benchmarking",
6972 "frame-support",7093 "frame-support",
70107131
7011[[package]]7132[[package]]
7012name = "pallet-collective"7133name = "pallet-collective"
7013version = "4.0.0-dev"7134version = "25.0.0"
7014source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7135source = "registry+https://github.com/rust-lang/crates.io-index"
7136checksum = "dddb120b5ee520146617a8c49b4d4c980ba9188918d43085539bf78815e7ec1d"
7015dependencies = [7137dependencies = [
7016 "frame-benchmarking",7138 "frame-benchmarking",
7017 "frame-support",7139 "frame-support",
70717193
7072[[package]]7194[[package]]
7073name = "pallet-conviction-voting"7195name = "pallet-conviction-voting"
7074version = "4.0.0-dev"7196version = "25.0.0"
7075source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7197source = "registry+https://github.com/rust-lang/crates.io-index"
7198checksum = "1c8ff7512a377b708f71772e5169550cebc8f74bc8c26553015698eaa0975356"
7076dependencies = [7199dependencies = [
7077 "assert_matches",7200 "assert_matches",
7078 "frame-benchmarking",7201 "frame-benchmarking",
70887211
7089[[package]]7212[[package]]
7090name = "pallet-democracy"7213name = "pallet-democracy"
7091version = "4.0.0-dev"7214version = "25.0.0"
7092source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7215source = "registry+https://github.com/rust-lang/crates.io-index"
7216checksum = "ed9f24ad18db2eeae0f03ba1743a82aaf300e0bbd6cdcb1119b0da93eef3d77f"
7093dependencies = [7217dependencies = [
7094 "frame-benchmarking",7218 "frame-benchmarking",
7095 "frame-support",7219 "frame-support",
71067230
7107[[package]]7231[[package]]
7108name = "pallet-election-provider-multi-phase"7232name = "pallet-election-provider-multi-phase"
7109version = "4.0.0-dev"7233version = "24.0.0"
7110source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7234source = "registry+https://github.com/rust-lang/crates.io-index"
7235checksum = "481178ef558a9409d9c12fc01279b517e3a0a7797664e89761447dba3a182ce6"
7111dependencies = [7236dependencies = [
7112 "frame-benchmarking",7237 "frame-benchmarking",
7113 "frame-election-provider-support",7238 "frame-election-provider-support",
7124 "sp-npos-elections",7249 "sp-npos-elections",
7125 "sp-runtime",7250 "sp-runtime",
7126 "sp-std",7251 "sp-std",
7127 "strum",7252 "strum 0.24.1",
7128]7253]
71297254
7130[[package]]7255[[package]]
7131name = "pallet-election-provider-support-benchmarking"7256name = "pallet-election-provider-support-benchmarking"
7132version = "4.0.0-dev"7257version = "24.0.0"
7133source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7258source = "registry+https://github.com/rust-lang/crates.io-index"
7259checksum = "b5ab6413ec88b64acf849a202795c67940dc3bcc846ce03bd0893b90e2119ecf"
7134dependencies = [7260dependencies = [
7135 "frame-benchmarking",7261 "frame-benchmarking",
7136 "frame-election-provider-support",7262 "frame-election-provider-support",
71437269
7144[[package]]7270[[package]]
7145name = "pallet-elections-phragmen"7271name = "pallet-elections-phragmen"
7146version = "5.0.0-dev"7272version = "26.0.0"
7147source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7273source = "registry+https://github.com/rust-lang/crates.io-index"
7274checksum = "021da1d28b604b3654f895987dcb1ccb47d73102b31bc84c8f784bed261f01d8"
7148dependencies = [7275dependencies = [
7149 "frame-benchmarking",7276 "frame-benchmarking",
7150 "frame-support",7277 "frame-support",
7163[[package]]7290[[package]]
7164name = "pallet-ethereum"7291name = "pallet-ethereum"
7165version = "4.0.0-dev"7292version = "4.0.0-dev"
7166source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"7293source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
7167dependencies = [7294dependencies = [
7168 "ethereum",7295 "ethereum",
7169 "ethereum-types",7296 "ethereum-types",
7186[[package]]7313[[package]]
7187name = "pallet-evm"7314name = "pallet-evm"
7188version = "6.0.0-dev"7315version = "6.0.0-dev"
7189source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"7316source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
7190dependencies = [7317dependencies = [
7191 "environmental",7318 "environmental",
7192 "evm",7319 "evm",
7268[[package]]7395[[package]]
7269name = "pallet-evm-precompile-simple"7396name = "pallet-evm-precompile-simple"
7270version = "2.0.0-dev"7397version = "2.0.0-dev"
7271source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8a"7398source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.3.0#2b684850edc955bcd3c3943216e451364ff0afa3"
7272dependencies = [7399dependencies = [
7273 "fp-evm",7400 "fp-evm",
7274 "ripemd",7401 "ripemd",
72937420
7294[[package]]7421[[package]]
7295name = "pallet-fast-unstake"7422name = "pallet-fast-unstake"
7296version = "4.0.0-dev"7423version = "24.0.0"
7297source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7424source = "registry+https://github.com/rust-lang/crates.io-index"
7425checksum = "05634a197738c999a3032393916182fedccce13cb063fc330ee9bf810cd53b49"
7298dependencies = [7426dependencies = [
7299 "docify",7427 "docify",
7300 "frame-benchmarking",7428 "frame-benchmarking",
73647492
7365[[package]]7493[[package]]
7366name = "pallet-grandpa"7494name = "pallet-grandpa"
7367version = "4.0.0-dev"7495version = "25.0.0"
7368source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7496source = "registry+https://github.com/rust-lang/crates.io-index"
7497checksum = "b87c7f4cd94a526054dfebf7a84fbcaf6385033defa246ad83e321e71f8c5a92"
7369dependencies = [7498dependencies = [
7370 "frame-benchmarking",7499 "frame-benchmarking",
7371 "frame-support",7500 "frame-support",
74047533
7405[[package]]7534[[package]]
7406name = "pallet-identity"7535name = "pallet-identity"
7407version = "4.0.0-dev"7536version = "25.0.0"
7408source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7537source = "registry+https://github.com/rust-lang/crates.io-index"
7538checksum = "735bf6c19d30299e2d448797170a67d41c6a8ba593fb3a71ce4e11d3b85c60e9"
7409dependencies = [7539dependencies = [
7410 "enumflags2",7540 "enumflags2",
7411 "frame-benchmarking",7541 "frame-benchmarking",
74207550
7421[[package]]7551[[package]]
7422name = "pallet-im-online"7552name = "pallet-im-online"
7423version = "4.0.0-dev"7553version = "24.0.0"
7424source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7554source = "registry+https://github.com/rust-lang/crates.io-index"
7555checksum = "59eb1c68cc6b4700ad1d2a81ba847ff7b37406aa0326b7716825155d3f985762"
7425dependencies = [7556dependencies = [
7426 "frame-benchmarking",7557 "frame-benchmarking",
7427 "frame-support",7558 "frame-support",
74407571
7441[[package]]7572[[package]]
7442name = "pallet-indices"7573name = "pallet-indices"
7443version = "4.0.0-dev"7574version = "25.0.0"
7444source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7575source = "registry+https://github.com/rust-lang/crates.io-index"
7576checksum = "0893ae7f2211010e92bf57fe31f18e2223a2f97f6d6393aa7192e283ec520beb"
7445dependencies = [7577dependencies = [
7446 "frame-benchmarking",7578 "frame-benchmarking",
7447 "frame-support",7579 "frame-support",
74877619
7488[[package]]7620[[package]]
7489name = "pallet-membership"7621name = "pallet-membership"
7490version = "4.0.0-dev"7622version = "25.0.0"
7491source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7623source = "registry+https://github.com/rust-lang/crates.io-index"
7624checksum = "2e1504034588eb733f8ce98b77757e9a7390662313aa133ef1e3b9fbb94359c7"
7492dependencies = [7625dependencies = [
7493 "frame-benchmarking",7626 "frame-benchmarking",
7494 "frame-support",7627 "frame-support",
75047637
7505[[package]]7638[[package]]
7506name = "pallet-message-queue"7639name = "pallet-message-queue"
7507version = "7.0.0-dev"7640version = "28.0.0"
7508source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7641source = "registry+https://github.com/rust-lang/crates.io-index"
7642checksum = "0776bf51d03bd746159063fa1357234feb85114273d40ef3aa3efba65d091eb4"
7509dependencies = [7643dependencies = [
7510 "frame-benchmarking",7644 "frame-benchmarking",
7511 "frame-support",7645 "frame-support",
75237657
7524[[package]]7658[[package]]
7525name = "pallet-mmr"7659name = "pallet-mmr"
7526version = "4.0.0-dev"7660version = "24.0.0"
7527source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7661source = "registry+https://github.com/rust-lang/crates.io-index"
7662checksum = "e2b9789cac80b48e9427724d0b400f984fb844fc711fc2dd2d0cdccdedda7169"
7528dependencies = [7663dependencies = [
7529 "frame-benchmarking",7664 "frame-benchmarking",
7530 "frame-support",7665 "frame-support",
75417676
7542[[package]]7677[[package]]
7543name = "pallet-multisig"7678name = "pallet-multisig"
7544version = "4.0.0-dev"7679version = "25.0.0"
7545source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7680source = "registry+https://github.com/rust-lang/crates.io-index"
7681checksum = "fea2785a0bfb1884a8283bf65010bb7189c8fce958ced9947a8c71c148ef199f"
7546dependencies = [7682dependencies = [
7547 "frame-benchmarking",7683 "frame-benchmarking",
7548 "frame-support",7684 "frame-support",
75577693
7558[[package]]7694[[package]]
7559name = "pallet-nis"7695name = "pallet-nis"
7560version = "4.0.0-dev"7696version = "25.0.0"
7561source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7697source = "registry+https://github.com/rust-lang/crates.io-index"
7698checksum = "7aa7ec891b7f1801a405095a2ad2c70eef94d2abe86792eee54794de23cbd035"
7562dependencies = [7699dependencies = [
7563 "frame-benchmarking",7700 "frame-benchmarking",
7564 "frame-support",7701 "frame-support",
75737710
7574[[package]]7711[[package]]
7575name = "pallet-nomination-pools"7712name = "pallet-nomination-pools"
7576version = "1.0.0"7713version = "22.0.0"
7577source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7714source = "registry+https://github.com/rust-lang/crates.io-index"
7715checksum = "1896f33fff0c41934532fb492078d78b784f301ddd81e5041dd8e8279e652c49"
7578dependencies = [7716dependencies = [
7579 "frame-support",7717 "frame-support",
7580 "frame-system",7718 "frame-system",
75927730
7593[[package]]7731[[package]]
7594name = "pallet-nomination-pools-benchmarking"7732name = "pallet-nomination-pools-benchmarking"
7595version = "1.0.0"7733version = "23.0.0"
7596source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7734source = "registry+https://github.com/rust-lang/crates.io-index"
7735checksum = "b27cbf4a47cc79862d254f16b38c68fd2dda087ce58e7c0021859d89718e865a"
7597dependencies = [7736dependencies = [
7598 "frame-benchmarking",7737 "frame-benchmarking",
7599 "frame-election-provider-support",7738 "frame-election-provider-support",
76127751
7613[[package]]7752[[package]]
7614name = "pallet-nomination-pools-runtime-api"7753name = "pallet-nomination-pools-runtime-api"
7615version = "1.0.0-dev"7754version = "20.0.0"
7616source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7755source = "registry+https://github.com/rust-lang/crates.io-index"
7756checksum = "65c256cc530a19ff614f2af9b5c95ae9aa777a2bf1542aa455ae65e842f8c924"
7617dependencies = [7757dependencies = [
7618 "pallet-nomination-pools",7758 "pallet-nomination-pools",
7619 "parity-scale-codec",7759 "parity-scale-codec",
76447784
7645[[package]]7785[[package]]
7646name = "pallet-offences"7786name = "pallet-offences"
7647version = "4.0.0-dev"7787version = "24.0.0"
7648source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7788source = "registry+https://github.com/rust-lang/crates.io-index"
7789checksum = "f3fd14c02ed4b689652826aa93284aada5a2cf859df3cc34ad88b2fd410a8c50"
7649dependencies = [7790dependencies = [
7650 "frame-support",7791 "frame-support",
7651 "frame-system",7792 "frame-system",
76617802
7662[[package]]7803[[package]]
7663name = "pallet-offences-benchmarking"7804name = "pallet-offences-benchmarking"
7664version = "4.0.0-dev"7805version = "25.0.0"
7665source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7806source = "registry+https://github.com/rust-lang/crates.io-index"
7807checksum = "b1b3ae77cfb16f0495372853d42a44e34ab7b183bd8996a8cee91715f783ff49"
7666dependencies = [7808dependencies = [
7667 "frame-benchmarking",7809 "frame-benchmarking",
7668 "frame-election-provider-support",7810 "frame-election-provider-support",
76857827
7686[[package]]7828[[package]]
7687name = "pallet-preimage"7829name = "pallet-preimage"
7688version = "4.0.0-dev"7830version = "25.0.0"
7689source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7831source = "registry+https://github.com/rust-lang/crates.io-index"
7832checksum = "a1ed40405c758b52375cfc75aac74f10ff9bb9480569e5cfca42682e2db6c387"
7690dependencies = [7833dependencies = [
7691 "frame-benchmarking",7834 "frame-benchmarking",
7692 "frame-support",7835 "frame-support",
77027845
7703[[package]]7846[[package]]
7704name = "pallet-proxy"7847name = "pallet-proxy"
7705version = "4.0.0-dev"7848version = "25.0.0"
7706source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7849source = "registry+https://github.com/rust-lang/crates.io-index"
7850checksum = "0fbc0b550f5cbbad51f9daf795cc7046d40bbff256dae8d6072fd710ab40fd3a"
7707dependencies = [7851dependencies = [
7708 "frame-benchmarking",7852 "frame-benchmarking",
7709 "frame-support",7853 "frame-support",
77177861
7718[[package]]7862[[package]]
7719name = "pallet-ranked-collective"7863name = "pallet-ranked-collective"
7720version = "4.0.0-dev"7864version = "25.0.0"
7721source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7865source = "registry+https://github.com/rust-lang/crates.io-index"
7866checksum = "8181da7fd6b9adf4f8641c5bcb156cd209e3226eea87ee9f9b1ac41f8e37c714"
7722dependencies = [7867dependencies = [
7723 "frame-benchmarking",7868 "frame-benchmarking",
7724 "frame-support",7869 "frame-support",
77357880
7736[[package]]7881[[package]]
7737name = "pallet-recovery"7882name = "pallet-recovery"
7738version = "4.0.0-dev"7883version = "25.0.0"
7739source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7884source = "registry+https://github.com/rust-lang/crates.io-index"
7885checksum = "889fddd16cfdea09c2ae4dc8e9f67a1ec4b8ac680412cffb772fa572489ec687"
7740dependencies = [7886dependencies = [
7741 "frame-benchmarking",7887 "frame-benchmarking",
7742 "frame-support",7888 "frame-support",
77507896
7751[[package]]7897[[package]]
7752name = "pallet-referenda"7898name = "pallet-referenda"
7753version = "4.0.0-dev"7899version = "25.0.0"
7754source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7900source = "registry+https://github.com/rust-lang/crates.io-index"
7901checksum = "592ff9873af379bf55e835072afd787cd6435204213ac484e86345b026f4ae4e"
7755dependencies = [7902dependencies = [
7756 "assert_matches",7903 "assert_matches",
7757 "frame-benchmarking",7904 "frame-benchmarking",
77897936
7790[[package]]7937[[package]]
7791name = "pallet-scheduler"7938name = "pallet-scheduler"
7792version = "4.0.0-dev"7939version = "26.0.0"
7793source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7940source = "registry+https://github.com/rust-lang/crates.io-index"
7941checksum = "3508a51d359c6640577feead9dc00667f38cec385baad77b636c61ff746ffe24"
7794dependencies = [7942dependencies = [
7795 "docify",7943 "docify",
7796 "frame-benchmarking",7944 "frame-benchmarking",
78077955
7808[[package]]7956[[package]]
7809name = "pallet-session"7957name = "pallet-session"
7810version = "4.0.0-dev"7958version = "25.0.0"
7811source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7959source = "registry+https://github.com/rust-lang/crates.io-index"
7960checksum = "768a6fb5333efc2bd2a3538c1d6ffa4178398660d4e3be89f2eb82d4e9088ae6"
7812dependencies = [7961dependencies = [
7813 "frame-support",7962 "frame-support",
7814 "frame-system",7963 "frame-system",
78297978
7830[[package]]7979[[package]]
7831name = "pallet-session-benchmarking"7980name = "pallet-session-benchmarking"
7832version = "4.0.0-dev"7981version = "25.0.0"
7833source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"7982source = "registry+https://github.com/rust-lang/crates.io-index"
7983checksum = "5401cee669394e86a15851ace4ad60ef1b4d656f11ff22c83d8004051279ea59"
7834dependencies = [7984dependencies = [
7835 "frame-benchmarking",7985 "frame-benchmarking",
7836 "frame-support",7986 "frame-support",
78467996
7847[[package]]7997[[package]]
7848name = "pallet-society"7998name = "pallet-society"
7849version = "4.0.0-dev"7999version = "25.0.0"
7850source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8000source = "registry+https://github.com/rust-lang/crates.io-index"
8001checksum = "36959be2c7f810ba6b8ece8cfe2ee515774c1c776f1ed0bebf3b9e8068f6a435"
7851dependencies = [8002dependencies = [
7852 "frame-benchmarking",8003 "frame-benchmarking",
7853 "frame-support",8004 "frame-support",
78648015
7865[[package]]8016[[package]]
7866name = "pallet-staking"8017name = "pallet-staking"
7867version = "4.0.0-dev"8018version = "25.0.0"
7868source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8019source = "registry+https://github.com/rust-lang/crates.io-index"
8020checksum = "bed335abd32d357dd9750dae7fb87b01dfd8fe69faadcb94a6e0e0a43057d923"
7869dependencies = [8021dependencies = [
7870 "frame-benchmarking",8022 "frame-benchmarking",
7871 "frame-election-provider-support",8023 "frame-election-provider-support",
78878039
7888[[package]]8040[[package]]
7889name = "pallet-staking-reward-curve"8041name = "pallet-staking-reward-curve"
7890version = "4.0.0-dev"8042version = "10.0.0"
7891source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8043source = "registry+https://github.com/rust-lang/crates.io-index"
8044checksum = "df8878e29f3d001ac1b1b714621f462e41a9d1fa8f385657f955e8a1ec0684d7"
7892dependencies = [8045dependencies = [
7893 "proc-macro-crate",8046 "proc-macro-crate 1.3.1",
7894 "proc-macro2",8047 "proc-macro2",
7895 "quote",8048 "quote",
7896 "syn 2.0.37",8049 "syn 2.0.39",
7897]8050]
78988051
7899[[package]]8052[[package]]
7900name = "pallet-staking-reward-fn"8053name = "pallet-staking-reward-fn"
7901version = "4.0.0-dev"8054version = "16.0.0"
7902source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8055source = "registry+https://github.com/rust-lang/crates.io-index"
8056checksum = "45b6f832653badb5f70bdfecc1ded64b02b8159b27f18515af03f8b80f1b023b"
7903dependencies = [8057dependencies = [
7904 "log",8058 "log",
7905 "sp-arithmetic",8059 "sp-arithmetic",
7906]8060]
79078061
7908[[package]]8062[[package]]
7909name = "pallet-staking-runtime-api"8063name = "pallet-staking-runtime-api"
7910version = "4.0.0-dev"8064version = "11.0.0"
7911source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8065source = "registry+https://github.com/rust-lang/crates.io-index"
8066checksum = "773c0d24ad4da4b505e47b43e91c8c0af4e835f16104bc770732a4796c174748"
7912dependencies = [8067dependencies = [
7913 "parity-scale-codec",8068 "parity-scale-codec",
7914 "sp-api",8069 "sp-api",
7915]8070]
79168071
7917[[package]]8072[[package]]
7918name = "pallet-state-trie-migration"8073name = "pallet-state-trie-migration"
7919version = "4.0.0-dev"8074version = "26.0.0"
7920source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8075source = "registry+https://github.com/rust-lang/crates.io-index"
8076checksum = "550292d79f281fd1bfbbf2643f10cef3d67068075d46374295f2efe7f7113da0"
7921dependencies = [8077dependencies = [
7922 "frame-benchmarking",8078 "frame-benchmarking",
7923 "frame-support",8079 "frame-support",
79508106
7951[[package]]8107[[package]]
7952name = "pallet-sudo"8108name = "pallet-sudo"
7953version = "4.0.0-dev"8109version = "25.0.0"
7954source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8110source = "registry+https://github.com/rust-lang/crates.io-index"
8111checksum = "fcec9f73ecb8d0439a13043a253a9fd90aa6bf5aece6470194bbfc7f79256d88"
7955dependencies = [8112dependencies = [
8113 "docify",
7956 "frame-benchmarking",8114 "frame-benchmarking",
7957 "frame-support",8115 "frame-support",
7958 "frame-system",8116 "frame-system",
7966[[package]]8124[[package]]
7967name = "pallet-template-transaction-payment"8125name = "pallet-template-transaction-payment"
7968version = "3.0.0"8126version = "3.0.0"
7969source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v1.1.0#2fbec92640f517e4812be7ed61ef7691af6e0bba"8127source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v1.3.0#6071a67116a08ef81083337360de376b63c0ea1c"
7970dependencies = [8128dependencies = [
7971 "frame-benchmarking",8129 "frame-benchmarking",
7972 "frame-support",8130 "frame-support",
79978155
7998[[package]]8156[[package]]
7999name = "pallet-timestamp"8157name = "pallet-timestamp"
8000version = "4.0.0-dev"8158version = "24.0.0"
8001source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8159source = "registry+https://github.com/rust-lang/crates.io-index"
8160checksum = "b25ec8749cf3f481b5e5199be701bac0dea835851b83fc7c455192762711858d"
8002dependencies = [8161dependencies = [
8162 "docify",
8003 "frame-benchmarking",8163 "frame-benchmarking",
8004 "frame-support",8164 "frame-support",
8005 "frame-system",8165 "frame-system",
80168176
8017[[package]]8177[[package]]
8018name = "pallet-tips"8178name = "pallet-tips"
8019version = "4.0.0-dev"8179version = "24.0.0"
8020source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8180source = "registry+https://github.com/rust-lang/crates.io-index"
8181checksum = "81b17cf8b964e5533f1f5ac1f087f3f69adfead754cb5dd25abe395ec1e7abc9"
8021dependencies = [8182dependencies = [
8022 "frame-benchmarking",8183 "frame-benchmarking",
8023 "frame-support",8184 "frame-support",
80358196
8036[[package]]8197[[package]]
8037name = "pallet-transaction-payment"8198name = "pallet-transaction-payment"
8038version = "4.0.0-dev"8199version = "25.0.0"
8039source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8200source = "registry+https://github.com/rust-lang/crates.io-index"
8201checksum = "87ef7ceaac786e41613731e3bc48284f1aa3ec260934abda2daed949de6e5ada"
8040dependencies = [8202dependencies = [
8041 "frame-support",8203 "frame-support",
8042 "frame-system",8204 "frame-system",
80518213
8052[[package]]8214[[package]]
8053name = "pallet-transaction-payment-rpc"8215name = "pallet-transaction-payment-rpc"
8054version = "4.0.0-dev"8216version = "27.0.0"
8055source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8217source = "registry+https://github.com/rust-lang/crates.io-index"
8218checksum = "99adb3915b29d04362648a4be9114de3bfe37c431f214b1ef96b71f358950d9d"
8056dependencies = [8219dependencies = [
8057 "jsonrpsee",8220 "jsonrpsee",
8058 "pallet-transaction-payment-rpc-runtime-api",8221 "pallet-transaction-payment-rpc-runtime-api",
80678230
8068[[package]]8231[[package]]
8069name = "pallet-transaction-payment-rpc-runtime-api"8232name = "pallet-transaction-payment-rpc-runtime-api"
8070version = "4.0.0-dev"8233version = "25.0.0"
8071source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8234source = "registry+https://github.com/rust-lang/crates.io-index"
8235checksum = "07d87fdc4028155367c6ea98143054a6c00b38bfd77ec08681e289e429e35505"
8072dependencies = [8236dependencies = [
8073 "pallet-transaction-payment",8237 "pallet-transaction-payment",
8074 "parity-scale-codec",8238 "parity-scale-codec",
80798243
8080[[package]]8244[[package]]
8081name = "pallet-treasury"8245name = "pallet-treasury"
8082version = "4.0.0-dev"8246version = "24.0.0"
8083source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8247source = "registry+https://github.com/rust-lang/crates.io-index"
8248checksum = "8dd462af11574485864023849e0622916b611dbc88111192fb39b1e6d7e666ba"
8084dependencies = [8249dependencies = [
8250 "docify",
8085 "frame-benchmarking",8251 "frame-benchmarking",
8086 "frame-support",8252 "frame-support",
8087 "frame-system",8253 "frame-system",
8090 "parity-scale-codec",8256 "parity-scale-codec",
8091 "scale-info",8257 "scale-info",
8092 "serde",8258 "serde",
8259 "sp-core",
8093 "sp-runtime",8260 "sp-runtime",
8094 "sp-std",8261 "sp-std",
8095]8262]
81238290
8124[[package]]8291[[package]]
8125name = "pallet-utility"8292name = "pallet-utility"
8126version = "4.0.0-dev"8293version = "25.0.0"
8127source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8294source = "registry+https://github.com/rust-lang/crates.io-index"
8295checksum = "85a8a6941da32837e4297e0d8abe0a5c94f348a119cccbf27b0f99ee01246c0e"
8128dependencies = [8296dependencies = [
8129 "frame-benchmarking",8297 "frame-benchmarking",
8130 "frame-support",8298 "frame-support",
81398307
8140[[package]]8308[[package]]
8141name = "pallet-vesting"8309name = "pallet-vesting"
8142version = "4.0.0-dev"8310version = "25.0.0"
8143source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8311source = "registry+https://github.com/rust-lang/crates.io-index"
8312checksum = "fd29411ef24eb6a856adf1bc33b37ead4835a25dafb1c4c8c95b13fa5247748f"
8144dependencies = [8313dependencies = [
8145 "frame-benchmarking",8314 "frame-benchmarking",
8146 "frame-support",8315 "frame-support",
81548323
8155[[package]]8324[[package]]
8156name = "pallet-whitelist"8325name = "pallet-whitelist"
8157version = "4.0.0-dev"8326version = "24.0.0"
8158source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8327source = "registry+https://github.com/rust-lang/crates.io-index"
8328checksum = "d37304829099cfec7d17df70cfe11ccf6cb7bd624eab80e8e79e895859454540"
8159dependencies = [8329dependencies = [
8160 "frame-benchmarking",8330 "frame-benchmarking",
8161 "frame-support",8331 "frame-support",
81698339
8170[[package]]8340[[package]]
8171name = "pallet-xcm"8341name = "pallet-xcm"
8172version = "1.0.0"8342version = "4.0.0"
8173source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8343source = "registry+https://github.com/rust-lang/crates.io-index"
8344checksum = "04d5e5404d9dadb39390949aadc2c641c16ce4cb0f47ed7a7ff584ab914c2984"
8174dependencies = [8345dependencies = [
8175 "bounded-collections",8346 "bounded-collections",
8176 "frame-benchmarking",8347 "frame-benchmarking",
81908361
8191[[package]]8362[[package]]
8192name = "pallet-xcm-benchmarks"8363name = "pallet-xcm-benchmarks"
8193version = "1.0.0"8364version = "4.0.0"
8194source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8365source = "registry+https://github.com/rust-lang/crates.io-index"
8366checksum = "e6bfdc94e39541b111db7d2c2a95a18a3c3bb42dd37c20b8705727e617ce00c9"
8195dependencies = [8367dependencies = [
8196 "frame-benchmarking",8368 "frame-benchmarking",
8197 "frame-support",8369 "frame-support",
8208]8380]
82098381
8210[[package]]8382[[package]]
8211name = "parachain-info"
8212version = "0.1.0"
8213source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"
8214dependencies = [
8215 "cumulus-primitives-core",
8216 "frame-support",
8217 "frame-system",
8218 "parity-scale-codec",
8219 "scale-info",
8220 "sp-runtime",
8221 "sp-std",
8222]
8223
8224[[package]]
8225name = "parity-db"8383name = "parity-db"
8226version = "0.4.11"8384version = "0.4.12"
8227source = "registry+https://github.com/rust-lang/crates.io-index"8385source = "registry+https://github.com/rust-lang/crates.io-index"
8228checksum = "ab512a34b3c2c5e465731cc7668edf79208bbe520be03484eeb05e63ed221735"8386checksum = "59e9ab494af9e6e813c72170f0d3c1de1500990d62c97cc05cc7576f91aa402f"
8229dependencies = [8387dependencies = [
8230 "blake2",8388 "blake2 0.10.6",
8231 "crc32fast",8389 "crc32fast",
8232 "fs2",8390 "fs2",
8233 "hex",8391 "hex",
8262source = "registry+https://github.com/rust-lang/crates.io-index"8420source = "registry+https://github.com/rust-lang/crates.io-index"
8263checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260"8421checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260"
8264dependencies = [8422dependencies = [
8265 "proc-macro-crate",8423 "proc-macro-crate 1.3.1",
8266 "proc-macro2",8424 "proc-macro2",
8267 "quote",8425 "quote",
8268 "syn 1.0.109",8426 "syn 1.0.109",
82828440
8283[[package]]8441[[package]]
8284name = "parking"8442name = "parking"
8285version = "2.1.1"8443version = "2.2.0"
8286source = "registry+https://github.com/rust-lang/crates.io-index"8444source = "registry+https://github.com/rust-lang/crates.io-index"
8287checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067"8445checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
82888446
8289[[package]]8447[[package]]
8290name = "parking_lot"8448name = "parking_lot"
8304checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"8462checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
8305dependencies = [8463dependencies = [
8306 "lock_api",8464 "lock_api",
8307 "parking_lot_core 0.9.8",8465 "parking_lot_core 0.9.9",
8308]8466]
83098467
8310[[package]]8468[[package]]
83238481
8324[[package]]8482[[package]]
8325name = "parking_lot_core"8483name = "parking_lot_core"
8326version = "0.9.8"8484version = "0.9.9"
8327source = "registry+https://github.com/rust-lang/crates.io-index"8485source = "registry+https://github.com/rust-lang/crates.io-index"
8328checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"8486checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
8329dependencies = [8487dependencies = [
8330 "cfg-if",8488 "cfg-if",
8331 "libc",8489 "libc",
8332 "redox_syscall 0.3.5",8490 "redox_syscall 0.4.1",
8333 "smallvec",8491 "smallvec",
8334 "windows-targets 0.48.5",8492 "windows-targets 0.48.5",
8335]8493]
84058563
8406[[package]]8564[[package]]
8407name = "pest"8565name = "pest"
8408version = "2.7.4"8566version = "2.7.5"
8409source = "registry+https://github.com/rust-lang/crates.io-index"8567source = "registry+https://github.com/rust-lang/crates.io-index"
8410checksum = "c022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4"8568checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5"
8411dependencies = [8569dependencies = [
8412 "memchr",8570 "memchr",
8413 "thiserror",8571 "thiserror",
84168574
8417[[package]]8575[[package]]
8418name = "pest_derive"8576name = "pest_derive"
8419version = "2.7.4"8577version = "2.7.5"
8420source = "registry+https://github.com/rust-lang/crates.io-index"8578source = "registry+https://github.com/rust-lang/crates.io-index"
8421checksum = "35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8"8579checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2"
8422dependencies = [8580dependencies = [
8423 "pest",8581 "pest",
8424 "pest_generator",8582 "pest_generator",
8425]8583]
84268584
8427[[package]]8585[[package]]
8428name = "pest_generator"8586name = "pest_generator"
8429version = "2.7.4"8587version = "2.7.5"
8430source = "registry+https://github.com/rust-lang/crates.io-index"8588source = "registry+https://github.com/rust-lang/crates.io-index"
8431checksum = "bc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123a"8589checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227"
8432dependencies = [8590dependencies = [
8433 "pest",8591 "pest",
8434 "pest_meta",8592 "pest_meta",
8435 "proc-macro2",8593 "proc-macro2",
8436 "quote",8594 "quote",
8437 "syn 2.0.37",8595 "syn 2.0.39",
8438]8596]
84398597
8440[[package]]8598[[package]]
8441name = "pest_meta"8599name = "pest_meta"
8442version = "2.7.4"8600version = "2.7.5"
8443source = "registry+https://github.com/rust-lang/crates.io-index"8601source = "registry+https://github.com/rust-lang/crates.io-index"
8444checksum = "1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708d"8602checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6"
8445dependencies = [8603dependencies = [
8446 "once_cell",8604 "once_cell",
8447 "pest",8605 "pest",
8455checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"8613checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
8456dependencies = [8614dependencies = [
8457 "fixedbitset",8615 "fixedbitset",
8458 "indexmap 2.0.2",8616 "indexmap 2.1.0",
8459]8617]
84608618
8461[[package]]8619[[package]]
8475dependencies = [8633dependencies = [
8476 "proc-macro2",8634 "proc-macro2",
8477 "quote",8635 "quote",
8478 "syn 2.0.37",8636 "syn 2.0.39",
8479]8637]
84808638
8481[[package]]8639[[package]]
85358693
8536[[package]]8694[[package]]
8537name = "platforms"8695name = "platforms"
8538version = "3.1.2"8696version = "3.2.0"
8539source = "registry+https://github.com/rust-lang/crates.io-index"8697source = "registry+https://github.com/rust-lang/crates.io-index"
8540checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8"8698checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0"
85418699
8542[[package]]8700[[package]]
8543name = "polkadot-approval-distribution"8701name = "polkadot-approval-distribution"
8544version = "1.0.0"8702version = "4.0.0"
8545source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8703source = "registry+https://github.com/rust-lang/crates.io-index"
8704checksum = "aafcdaca311b3f8ea463548cc2f62289a2689d3198ea8cba2d100fab378fff3c"
8546dependencies = [8705dependencies = [
8547 "futures",8706 "futures",
8548 "futures-timer",8707 "futures-timer",
85598718
8560[[package]]8719[[package]]
8561name = "polkadot-availability-bitfield-distribution"8720name = "polkadot-availability-bitfield-distribution"
8562version = "1.0.0"8721version = "4.0.0"
8563source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8722source = "registry+https://github.com/rust-lang/crates.io-index"
8723checksum = "316fa25f773ac3f470578d2dc2ff73cefc2a01c9ea0a9a00767529184701792c"
8564dependencies = [8724dependencies = [
8565 "always-assert",8725 "always-assert",
8566 "futures",8726 "futures",
85758735
8576[[package]]8736[[package]]
8577name = "polkadot-availability-distribution"8737name = "polkadot-availability-distribution"
8578version = "1.0.0"8738version = "4.0.0"
8579source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8739source = "registry+https://github.com/rust-lang/crates.io-index"
8740checksum = "118ed63ece1ec1ccf240ab44d932a932ae778ece57a6fba34953b7c0b436f6b1"
8580dependencies = [8741dependencies = [
8581 "derive_more",8742 "derive_more",
8582 "fatality",8743 "fatality",
85988759
8599[[package]]8760[[package]]
8600name = "polkadot-availability-recovery"8761name = "polkadot-availability-recovery"
8601version = "1.0.0"8762version = "4.0.0"
8602source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8763source = "registry+https://github.com/rust-lang/crates.io-index"
8764checksum = "13245b9f37a4d409c47cf46f74d2601df82f1bf12678b1a792ad1aa5effebd13"
8603dependencies = [8765dependencies = [
8766 "async-trait",
8604 "fatality",8767 "fatality",
8605 "futures",8768 "futures",
8606 "parity-scale-codec",8769 "parity-scale-codec",
86198782
8620[[package]]8783[[package]]
8621name = "polkadot-cli"8784name = "polkadot-cli"
8622version = "1.1.0"8785version = "4.0.0"
8623source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8786source = "registry+https://github.com/rust-lang/crates.io-index"
8787checksum = "dd0d87ec2b375e4f353d9fc22fa8d405578e44f1f12a7ff74936a3997f69d62f"
8624dependencies = [8788dependencies = [
8625 "clap",8789 "clap",
8626 "frame-benchmarking-cli",8790 "frame-benchmarking-cli",
8627 "futures",8791 "futures",
8628 "log",8792 "log",
8629 "polkadot-node-metrics",8793 "polkadot-node-metrics",
8630 "polkadot-performance-test",8794 "polkadot-node-primitives",
8631 "polkadot-service",8795 "polkadot-service",
8632 "sc-cli",8796 "sc-cli",
8633 "sc-executor",8797 "sc-executor",
86468810
8647[[package]]8811[[package]]
8648name = "polkadot-collator-protocol"8812name = "polkadot-collator-protocol"
8649version = "1.0.0"8813version = "4.0.0"
8650source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8814source = "registry+https://github.com/rust-lang/crates.io-index"
8815checksum = "1f5ed0e739de576e41203ba99b9da1347998174a84fb5ea825f1a8e30e1dff88"
8651dependencies = [8816dependencies = [
8652 "bitvec",8817 "bitvec",
8653 "fatality",8818 "fatality",
86688833
8669[[package]]8834[[package]]
8670name = "polkadot-core-primitives"8835name = "polkadot-core-primitives"
8671version = "1.0.0"8836version = "4.0.0"
8672source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8837source = "registry+https://github.com/rust-lang/crates.io-index"
8838checksum = "b08d1d6ca24e1b13f8069e015cfab794344212dd7436aadd61de8086a82664ef"
8673dependencies = [8839dependencies = [
8674 "parity-scale-codec",8840 "parity-scale-codec",
8675 "scale-info",8841 "scale-info",
86808846
8681[[package]]8847[[package]]
8682name = "polkadot-dispute-distribution"8848name = "polkadot-dispute-distribution"
8683version = "1.0.0"8849version = "4.0.0"
8684source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8850source = "registry+https://github.com/rust-lang/crates.io-index"
8851checksum = "ffa05fec2897e38a2ec42df5f84110fbb170dbe549d5d1e454f635b141cb2aca"
8685dependencies = [8852dependencies = [
8686 "derive_more",8853 "derive_more",
8687 "fatality",8854 "fatality",
87058872
8706[[package]]8873[[package]]
8707name = "polkadot-erasure-coding"8874name = "polkadot-erasure-coding"
8708version = "1.0.0"8875version = "4.0.0"
8709source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8876source = "registry+https://github.com/rust-lang/crates.io-index"
8877checksum = "9714c537368095f1bc2e70c45fb8ae3347c19b344f8d5b4722cc781690a74924"
8710dependencies = [8878dependencies = [
8711 "parity-scale-codec",8879 "parity-scale-codec",
8712 "polkadot-node-primitives",8880 "polkadot-node-primitives",
87198887
8720[[package]]8888[[package]]
8721name = "polkadot-gossip-support"8889name = "polkadot-gossip-support"
8722version = "1.0.0"8890version = "4.0.0"
8723source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8891source = "registry+https://github.com/rust-lang/crates.io-index"
8892checksum = "9acc782f4c0efb0809cc325a49b50c498255a973dfc665e940043af20936d525"
8724dependencies = [8893dependencies = [
8725 "futures",8894 "futures",
8726 "futures-timer",8895 "futures-timer",
87408909
8741[[package]]8910[[package]]
8742name = "polkadot-network-bridge"8911name = "polkadot-network-bridge"
8743version = "1.0.0"8912version = "4.0.0"
8744source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8913source = "registry+https://github.com/rust-lang/crates.io-index"
8914checksum = "bf7355e7f9cac8e5fe4899796e92aea2ea94678854dc44e21890a33d4c6c6ec3"
8745dependencies = [8915dependencies = [
8746 "always-assert",8916 "always-assert",
8747 "async-trait",8917 "async-trait",
87638933
8764[[package]]8934[[package]]
8765name = "polkadot-node-collation-generation"8935name = "polkadot-node-collation-generation"
8766version = "1.0.0"8936version = "4.0.0"
8767source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8937source = "registry+https://github.com/rust-lang/crates.io-index"
8938checksum = "9bed91a561c9edfc5bd1d8e432cec8cecde63aaf12131cc19881d67e39be0fce"
8768dependencies = [8939dependencies = [
8769 "futures",8940 "futures",
8770 "parity-scale-codec",8941 "parity-scale-codec",
87818952
8782[[package]]8953[[package]]
8783name = "polkadot-node-core-approval-voting"8954name = "polkadot-node-core-approval-voting"
8784version = "1.0.0"8955version = "4.0.0"
8785source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8956source = "registry+https://github.com/rust-lang/crates.io-index"
8957checksum = "976e5fcd0c10fbe37d120a9e4702324585e529498c56d03fd7b529f17644fe34"
8786dependencies = [8958dependencies = [
8787 "bitvec",8959 "bitvec",
8788 "derive_more",8960 "derive_more",
88108982
8811[[package]]8983[[package]]
8812name = "polkadot-node-core-av-store"8984name = "polkadot-node-core-av-store"
8813version = "1.0.0"8985version = "4.0.0"
8814source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"8986source = "registry+https://github.com/rust-lang/crates.io-index"
8987checksum = "d9d1018400db515cec0748e4c83d6010601d1784350dfd465386a7ee47699cd3"
8815dependencies = [8988dependencies = [
8816 "bitvec",8989 "bitvec",
8817 "futures",8990 "futures",
88329005
8833[[package]]9006[[package]]
8834name = "polkadot-node-core-backing"9007name = "polkadot-node-core-backing"
8835version = "1.0.0"9008version = "4.0.0"
8836source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9009source = "registry+https://github.com/rust-lang/crates.io-index"
9010checksum = "051940f4f7214dcc370077ead642052cda2c7316641ea9ff1f05624be2a272d2"
8837dependencies = [9011dependencies = [
8838 "bitvec",9012 "bitvec",
8839 "fatality",9013 "fatality",
88519025
8852[[package]]9026[[package]]
8853name = "polkadot-node-core-bitfield-signing"9027name = "polkadot-node-core-bitfield-signing"
8854version = "1.0.0"9028version = "4.0.0"
8855source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9029source = "registry+https://github.com/rust-lang/crates.io-index"
9030checksum = "77cea47f010914b5e52f2f1eb96c058cb117045c5864c733236e7b24ea103d22"
8856dependencies = [9031dependencies = [
8857 "futures",9032 "futures",
8858 "polkadot-node-subsystem",9033 "polkadot-node-subsystem",
88669041
8867[[package]]9042[[package]]
8868name = "polkadot-node-core-candidate-validation"9043name = "polkadot-node-core-candidate-validation"
8869version = "1.0.0"9044version = "4.0.0"
8870source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9045source = "registry+https://github.com/rust-lang/crates.io-index"
9046checksum = "fbb2306632d1ee08cc2f4d5945b4ec795fd79ce801ae03e79961c18877220ed2"
8871dependencies = [9047dependencies = [
8872 "async-trait",9048 "async-trait",
8873 "futures",9049 "futures",
88879063
8888[[package]]9064[[package]]
8889name = "polkadot-node-core-chain-api"9065name = "polkadot-node-core-chain-api"
8890version = "1.0.0"9066version = "4.0.0"
8891source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9067source = "registry+https://github.com/rust-lang/crates.io-index"
9068checksum = "712e8787fcec6e036d21421adf3db0295c142a878c482e0aba2e5aefcf050f10"
8892dependencies = [9069dependencies = [
8893 "futures",9070 "futures",
8894 "polkadot-node-metrics",9071 "polkadot-node-metrics",
89029079
8903[[package]]9080[[package]]
8904name = "polkadot-node-core-chain-selection"9081name = "polkadot-node-core-chain-selection"
8905version = "1.0.0"9082version = "4.0.0"
8906source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9083source = "registry+https://github.com/rust-lang/crates.io-index"
9084checksum = "8028469b10f5f1fa10ea9b08cb09bb53bcb55a25298e4154928d3aaf7d5d066a"
8907dependencies = [9085dependencies = [
8908 "futures",9086 "futures",
8909 "futures-timer",9087 "futures-timer",
89199097
8920[[package]]9098[[package]]
8921name = "polkadot-node-core-dispute-coordinator"9099name = "polkadot-node-core-dispute-coordinator"
8922version = "1.0.0"9100version = "4.0.0"
8923source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9101source = "registry+https://github.com/rust-lang/crates.io-index"
9102checksum = "662387f0e7b23596326754796fbb6f52e32c3deb0c11f9ff341e23a0a7139608"
8924dependencies = [9103dependencies = [
8925 "fatality",9104 "fatality",
8926 "futures",9105 "futures",
89389117
8939[[package]]9118[[package]]
8940name = "polkadot-node-core-parachains-inherent"9119name = "polkadot-node-core-parachains-inherent"
8941version = "1.0.0"9120version = "4.0.0"
8942source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9121source = "registry+https://github.com/rust-lang/crates.io-index"
9122checksum = "ec0f57ce13de845fe1441fa3ab3405dcb142d3dc0ea985c4e28efa35b97d07d0"
8943dependencies = [9123dependencies = [
8944 "async-trait",9124 "async-trait",
8945 "futures",9125 "futures",
89559135
8956[[package]]9136[[package]]
8957name = "polkadot-node-core-prospective-parachains"9137name = "polkadot-node-core-prospective-parachains"
8958version = "1.0.0"9138version = "3.0.0"
8959source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9139source = "registry+https://github.com/rust-lang/crates.io-index"
9140checksum = "5a010a14312c5c5eec800397cc60cce10131d4a29cedf563ee639fc7b9b27ba1"
8960dependencies = [9141dependencies = [
8961 "bitvec",9142 "bitvec",
8962 "fatality",9143 "fatality",
89729153
8973[[package]]9154[[package]]
8974name = "polkadot-node-core-provisioner"9155name = "polkadot-node-core-provisioner"
8975version = "1.0.0"9156version = "4.0.0"
8976source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9157source = "registry+https://github.com/rust-lang/crates.io-index"
9158checksum = "d8a67ac3aa0a0e89ff20d5eb761fca78c124848a2627e35343e824d78cc9fe91"
8977dependencies = [9159dependencies = [
8978 "bitvec",9160 "bitvec",
8979 "fatality",9161 "fatality",
89899171
8990[[package]]9172[[package]]
8991name = "polkadot-node-core-pvf"9173name = "polkadot-node-core-pvf"
8992version = "1.0.0"9174version = "4.0.0"
8993source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9175source = "registry+https://github.com/rust-lang/crates.io-index"
9176checksum = "6f58224dbfbd773947ff3fccc3318bda11909e8a0f7c36f7f1234c0c1f25a62a"
8994dependencies = [9177dependencies = [
8995 "always-assert",9178 "always-assert",
9179 "cfg-if",
8996 "futures",9180 "futures",
8997 "futures-timer",9181 "futures-timer",
9182 "is_executable",
8998 "libc",9183 "libc",
8999 "parity-scale-codec",9184 "parity-scale-codec",
9000 "pin-project",9185 "pin-project",
9009 "sp-core",9194 "sp-core",
9010 "sp-maybe-compressed-blob",9195 "sp-maybe-compressed-blob",
9011 "sp-wasm-interface",9196 "sp-wasm-interface",
9012 "substrate-build-script-utils",
9013 "tempfile",9197 "tempfile",
9014 "tokio",9198 "tokio",
9015 "tracing-gum",9199 "tracing-gum",
9016]9200]
90179201
9018[[package]]9202[[package]]
9019name = "polkadot-node-core-pvf-checker"9203name = "polkadot-node-core-pvf-checker"
9020version = "1.0.0"9204version = "4.0.0"
9021source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9205source = "registry+https://github.com/rust-lang/crates.io-index"
9206checksum = "7abe14484e66b365748bd4b2988cc2c68e03146bc399bdf8139f9eb5cf6c6cf0"
9022dependencies = [9207dependencies = [
9023 "futures",9208 "futures",
9024 "polkadot-node-primitives",9209 "polkadot-node-primitives",
90339218
9034[[package]]9219[[package]]
9035name = "polkadot-node-core-pvf-common"9220name = "polkadot-node-core-pvf-common"
9036version = "1.0.0"9221version = "4.0.0"
9037source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9222source = "registry+https://github.com/rust-lang/crates.io-index"
9223checksum = "94004d011a260b8efdf6ddf80ac815ba6ede84bb46e32d588161c1d860c5a65d"
9038dependencies = [9224dependencies = [
9225 "cfg-if",
9039 "cpu-time",9226 "cpu-time",
9040 "futures",9227 "futures",
9041 "landlock",9228 "landlock",
9055]9242]
90569243
9057[[package]]9244[[package]]
9058name = "polkadot-node-core-pvf-prepare-worker"
9059version = "1.0.0"
9060source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"
9061dependencies = [
9062 "futures",
9063 "libc",
9064 "parity-scale-codec",
9065 "polkadot-node-core-pvf-common",
9066 "polkadot-parachain-primitives",
9067 "polkadot-primitives",
9068 "rayon",
9069 "sc-executor",
9070 "sc-executor-common",
9071 "sc-executor-wasmtime",
9072 "sp-io",
9073 "sp-maybe-compressed-blob",
9074 "sp-tracing",
9075 "tikv-jemalloc-ctl",
9076 "tokio",
9077 "tracing-gum",
9078]
9079
9080[[package]]
9081name = "polkadot-node-core-runtime-api"9245name = "polkadot-node-core-runtime-api"
9082version = "1.0.0"9246version = "4.0.0"
9083source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9247source = "registry+https://github.com/rust-lang/crates.io-index"
9248checksum = "dccc7a95fea3562bd3a47f22c0e4ddcb755114dc0477f3173db8d5ebf0d84f50"
9084dependencies = [9249dependencies = [
9085 "futures",9250 "futures",
9086 "polkadot-node-metrics",9251 "polkadot-node-metrics",
90949259
9095[[package]]9260[[package]]
9096name = "polkadot-node-jaeger"9261name = "polkadot-node-jaeger"
9097version = "1.0.0"9262version = "4.0.0"
9098source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9263source = "registry+https://github.com/rust-lang/crates.io-index"
9264checksum = "2cfe6d4769181dce55b1b8fc53f0bd85bb4aa20473702fbce95a94abafa19379"
9099dependencies = [9265dependencies = [
9100 "lazy_static",9266 "lazy_static",
9101 "log",9267 "log",
91129278
9113[[package]]9279[[package]]
9114name = "polkadot-node-metrics"9280name = "polkadot-node-metrics"
9115version = "1.0.0"9281version = "4.0.0"
9116source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9282source = "registry+https://github.com/rust-lang/crates.io-index"
9283checksum = "c51a586fc3ef87c685588a650c18882b4cf069d8adc0d7d9bd2670749cb4e82b"
9117dependencies = [9284dependencies = [
9118 "bs58 0.5.0",9285 "bs58 0.5.0",
9119 "futures",9286 "futures",
91319298
9132[[package]]9299[[package]]
9133name = "polkadot-node-network-protocol"9300name = "polkadot-node-network-protocol"
9134version = "1.0.0"9301version = "4.0.0"
9135source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9302source = "registry+https://github.com/rust-lang/crates.io-index"
9303checksum = "f6de513655bf71400299cda1ccaebfa612fd3965e7ce5a9120b4ff37bfc80931"
9136dependencies = [9304dependencies = [
9137 "async-channel",9305 "async-channel 1.9.0",
9138 "async-trait",9306 "async-trait",
9139 "bitvec",9307 "bitvec",
9140 "derive_more",9308 "derive_more",
9148 "rand 0.8.5",9316 "rand 0.8.5",
9149 "sc-authority-discovery",9317 "sc-authority-discovery",
9150 "sc-network",9318 "sc-network",
9151 "strum",9319 "strum 0.24.1",
9152 "thiserror",9320 "thiserror",
9153 "tracing-gum",9321 "tracing-gum",
9154]9322]
91559323
9156[[package]]9324[[package]]
9157name = "polkadot-node-primitives"9325name = "polkadot-node-primitives"
9158version = "1.0.0"9326version = "4.0.0"
9159source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9327source = "registry+https://github.com/rust-lang/crates.io-index"
9328checksum = "3e82ee5edac871310bd1ce16a035ad2fc901d6ddd69ea0bbabc7f0a70a02770a"
9160dependencies = [9329dependencies = [
9161 "bounded-vec",9330 "bounded-vec",
9162 "futures",9331 "futures",
91779346
9178[[package]]9347[[package]]
9179name = "polkadot-node-subsystem"9348name = "polkadot-node-subsystem"
9180version = "1.0.0"9349version = "4.0.0"
9181source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9350source = "registry+https://github.com/rust-lang/crates.io-index"
9351checksum = "0e89d3f964ebd57275c2fff4d3cc755d210698fedeac1a0a238c0eb31534c96d"
9182dependencies = [9352dependencies = [
9183 "polkadot-node-jaeger",9353 "polkadot-node-jaeger",
9184 "polkadot-node-subsystem-types",9354 "polkadot-node-subsystem-types",
91879357
9188[[package]]9358[[package]]
9189name = "polkadot-node-subsystem-types"9359name = "polkadot-node-subsystem-types"
9190version = "1.0.0"9360version = "4.0.0"
9191source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9361source = "registry+https://github.com/rust-lang/crates.io-index"
9362checksum = "8e1013b3bac6e9b76bbd71433c3eba36b5c0fa9306bfc473ec02e3a104e156d2"
9192dependencies = [9363dependencies = [
9193 "async-trait",9364 "async-trait",
9194 "derive_more",9365 "derive_more",
9199 "polkadot-node-primitives",9370 "polkadot-node-primitives",
9200 "polkadot-primitives",9371 "polkadot-primitives",
9201 "polkadot-statement-table",9372 "polkadot-statement-table",
9373 "sc-client-api",
9202 "sc-network",9374 "sc-network",
9203 "sc-transaction-pool-api",9375 "sc-transaction-pool-api",
9204 "smallvec",9376 "smallvec",
92119383
9212[[package]]9384[[package]]
9213name = "polkadot-node-subsystem-util"9385name = "polkadot-node-subsystem-util"
9214version = "1.0.0"9386version = "4.0.0"
9215source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9387source = "registry+https://github.com/rust-lang/crates.io-index"
9388checksum = "8134075bfee921305ff229412e9282a3351215bf049c6a403197cc795f919941"
9216dependencies = [9389dependencies = [
9217 "async-trait",9390 "async-trait",
9218 "derive_more",9391 "derive_more",
9230 "polkadot-node-network-protocol",9403 "polkadot-node-network-protocol",
9231 "polkadot-node-primitives",9404 "polkadot-node-primitives",
9232 "polkadot-node-subsystem",9405 "polkadot-node-subsystem",
9406 "polkadot-node-subsystem-types",
9233 "polkadot-overseer",9407 "polkadot-overseer",
9234 "polkadot-primitives",9408 "polkadot-primitives",
9235 "prioritized-metered-channel",9409 "prioritized-metered-channel",
9236 "rand 0.8.5",9410 "rand 0.8.5",
9411 "sc-client-api",
9237 "schnellru",9412 "schnellru",
9238 "sp-application-crypto",9413 "sp-application-crypto",
9239 "sp-core",9414 "sp-core",
92449419
9245[[package]]9420[[package]]
9246name = "polkadot-overseer"9421name = "polkadot-overseer"
9247version = "1.0.0"9422version = "4.0.0"
9248source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9423source = "registry+https://github.com/rust-lang/crates.io-index"
9424checksum = "e2f547e981cbd72357ba30952193844d30de5063e9d304c117c9b941f12b5f84"
9249dependencies = [9425dependencies = [
9250 "async-trait",9426 "async-trait",
9251 "futures",9427 "futures",
9258 "polkadot-node-subsystem-types",9434 "polkadot-node-subsystem-types",
9259 "polkadot-primitives",9435 "polkadot-primitives",
9260 "sc-client-api",9436 "sc-client-api",
9261 "schnellru",
9262 "sp-api",9437 "sp-api",
9263 "sp-core",9438 "sp-core",
9264 "tikv-jemalloc-ctl",9439 "tikv-jemalloc-ctl",
92679442
9268[[package]]9443[[package]]
9269name = "polkadot-parachain-primitives"9444name = "polkadot-parachain-primitives"
9270version = "1.0.0"9445version = "3.0.0"
9271source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9446source = "registry+https://github.com/rust-lang/crates.io-index"
9447checksum = "42265630c0c48e25d7ee5a9f4bdcafd003be65c0a44deeb6541620ca169fa519"
9272dependencies = [9448dependencies = [
9273 "bounded-collections",9449 "bounded-collections",
9274 "derive_more",9450 "derive_more",
9283]9459]
92849460
9285[[package]]9461[[package]]
9286name = "polkadot-performance-test"
9287version = "1.0.0"
9288source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"
9289dependencies = [
9290 "env_logger 0.9.3",
9291 "log",
9292 "polkadot-erasure-coding",
9293 "polkadot-node-core-pvf-prepare-worker",
9294 "polkadot-node-primitives",
9295 "polkadot-primitives",
9296 "quote",
9297 "sc-executor-common",
9298 "sp-maybe-compressed-blob",
9299 "staging-kusama-runtime",
9300 "thiserror",
9301]
9302
9303[[package]]
9304name = "polkadot-primitives"9462name = "polkadot-primitives"
9305version = "1.0.0"9463version = "4.0.0"
9306source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9464source = "registry+https://github.com/rust-lang/crates.io-index"
9465checksum = "ee4508ff6b035edc08c54bb61238500179963f6f1eb8266dce6a5625509124bc"
9307dependencies = [9466dependencies = [
9308 "bitvec",9467 "bitvec",
9309 "hex-literal",9468 "hex-literal",
93289487
9329[[package]]9488[[package]]
9330name = "polkadot-rpc"9489name = "polkadot-rpc"
9331version = "1.0.0"9490version = "4.0.0"
9332source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9491source = "registry+https://github.com/rust-lang/crates.io-index"
9492checksum = "ce0432643ea2e4923db1f0ba6c82305c53725e18c857e911c4d979e4f7aafae5"
9333dependencies = [9493dependencies = [
9334 "jsonrpsee",9494 "jsonrpsee",
9335 "mmr-rpc",9495 "mmr-rpc",
9359]9519]
93609520
9361[[package]]9521[[package]]
9362name = "polkadot-runtime"
9363version = "1.0.0"
9364source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"
9365dependencies = [
9366 "bitvec",
9367 "frame-benchmarking",
9368 "frame-election-provider-support",
9369 "frame-executive",
9370 "frame-support",
9371 "frame-system",
9372 "frame-system-benchmarking",
9373 "frame-system-rpc-runtime-api",
9374 "frame-try-runtime",
9375 "hex-literal",
9376 "log",
9377 "pallet-authority-discovery",
9378 "pallet-authorship",
9379 "pallet-babe",
9380 "pallet-bags-list",
9381 "pallet-balances",
9382 "pallet-bounties",
9383 "pallet-child-bounties",
9384 "pallet-collective",
9385 "pallet-conviction-voting",
9386 "pallet-democracy",
9387 "pallet-election-provider-multi-phase",
9388 "pallet-election-provider-support-benchmarking",
9389 "pallet-elections-phragmen",
9390 "pallet-fast-unstake",
9391 "pallet-grandpa",
9392 "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0)",
9393 "pallet-im-online",
9394 "pallet-indices",
9395 "pallet-membership",
9396 "pallet-message-queue",
9397 "pallet-multisig",
9398 "pallet-nomination-pools",
9399 "pallet-nomination-pools-benchmarking",
9400 "pallet-nomination-pools-runtime-api",
9401 "pallet-offences",
9402 "pallet-offences-benchmarking",
9403 "pallet-preimage",
9404 "pallet-proxy",
9405 "pallet-referenda",
9406 "pallet-scheduler",
9407 "pallet-session",
9408 "pallet-session-benchmarking",
9409 "pallet-staking",
9410 "pallet-staking-reward-curve",
9411 "pallet-staking-runtime-api",
9412 "pallet-timestamp",
9413 "pallet-tips",
9414 "pallet-transaction-payment",
9415 "pallet-transaction-payment-rpc-runtime-api",
9416 "pallet-treasury",
9417 "pallet-utility",
9418 "pallet-vesting",
9419 "pallet-whitelist",
9420 "pallet-xcm",
9421 "pallet-xcm-benchmarks",
9422 "parity-scale-codec",
9423 "polkadot-primitives",
9424 "polkadot-runtime-common",
9425 "polkadot-runtime-constants",
9426 "polkadot-runtime-parachains",
9427 "rustc-hex",
9428 "scale-info",
9429 "serde",
9430 "serde_derive",
9431 "smallvec",
9432 "sp-api",
9433 "sp-arithmetic",
9434 "sp-authority-discovery",
9435 "sp-block-builder",
9436 "sp-consensus-babe",
9437 "sp-consensus-beefy",
9438 "sp-core",
9439 "sp-inherents",
9440 "sp-io",
9441 "sp-mmr-primitives",
9442 "sp-npos-elections",
9443 "sp-offchain",
9444 "sp-runtime",
9445 "sp-session",
9446 "sp-staking",
9447 "sp-std",
9448 "sp-storage",
9449 "sp-transaction-pool",
9450 "sp-version",
9451 "staging-xcm",
9452 "staging-xcm-builder",
9453 "staging-xcm-executor",
9454 "static_assertions",
9455 "substrate-wasm-builder",
9456]
9457
9458[[package]]
9459name = "polkadot-runtime-common"9522name = "polkadot-runtime-common"
9460version = "1.0.0"9523version = "4.0.0"
9461source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9524source = "registry+https://github.com/rust-lang/crates.io-index"
9525checksum = "a788f8ed8b33262c33f72d78e3416c5991e40d333178ae43000a92181ee44bca"
9462dependencies = [9526dependencies = [
9463 "bitvec",9527 "bitvec",
9464 "frame-benchmarking",9528 "frame-benchmarking",
9468 "impl-trait-for-tuples",9532 "impl-trait-for-tuples",
9469 "libsecp256k1",9533 "libsecp256k1",
9470 "log",9534 "log",
9535 "pallet-asset-rate",
9471 "pallet-authorship",9536 "pallet-authorship",
9472 "pallet-babe",9537 "pallet-babe",
9473 "pallet-balances",9538 "pallet-balances",
9480 "pallet-transaction-payment",9545 "pallet-transaction-payment",
9481 "pallet-treasury",9546 "pallet-treasury",
9482 "pallet-vesting",9547 "pallet-vesting",
9548 "pallet-xcm-benchmarks",
9483 "parity-scale-codec",9549 "parity-scale-codec",
9484 "polkadot-primitives",9550 "polkadot-primitives",
9485 "polkadot-runtime-parachains",9551 "polkadot-runtime-parachains",
9498 "sp-staking",9564 "sp-staking",
9499 "sp-std",9565 "sp-std",
9500 "staging-xcm",9566 "staging-xcm",
9567 "staging-xcm-builder",
9568 "staging-xcm-executor",
9501 "static_assertions",9569 "static_assertions",
9502]9570]
95039571
9504[[package]]9572[[package]]
9505name = "polkadot-runtime-constants"
9506version = "1.0.0"
9507source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"
9508dependencies = [
9509 "frame-support",
9510 "polkadot-primitives",
9511 "polkadot-runtime-common",
9512 "smallvec",
9513 "sp-core",
9514 "sp-runtime",
9515 "sp-weights",
9516]
9517
9518[[package]]
9519name = "polkadot-runtime-metrics"9573name = "polkadot-runtime-metrics"
9520version = "1.0.0"9574version = "4.0.0"
9521source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9575source = "registry+https://github.com/rust-lang/crates.io-index"
9576checksum = "bfe45b01d9d621174c9c0eef0871aeead5986393838206fe58df3ae414bcb8d2"
9522dependencies = [9577dependencies = [
9523 "bs58 0.5.0",9578 "bs58 0.5.0",
9524 "frame-benchmarking",9579 "frame-benchmarking",
95309585
9531[[package]]9586[[package]]
9532name = "polkadot-runtime-parachains"9587name = "polkadot-runtime-parachains"
9533version = "1.0.0"9588version = "4.0.0"
9534source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9589source = "registry+https://github.com/rust-lang/crates.io-index"
9590checksum = "936dbae8a7a88dba07da726d779126716e05364d8475ced1c313f32755050a02"
9535dependencies = [9591dependencies = [
9536 "bitflags 1.3.2",9592 "bitflags 1.3.2",
9537 "bitvec",9593 "bitvec",
9551 "pallet-timestamp",9607 "pallet-timestamp",
9552 "pallet-vesting",9608 "pallet-vesting",
9553 "parity-scale-codec",9609 "parity-scale-codec",
9610 "polkadot-core-primitives",
9554 "polkadot-parachain-primitives",9611 "polkadot-parachain-primitives",
9555 "polkadot-primitives",9612 "polkadot-primitives",
9556 "polkadot-runtime-metrics",9613 "polkadot-runtime-metrics",
95769633
9577[[package]]9634[[package]]
9578name = "polkadot-service"9635name = "polkadot-service"
9579version = "1.0.0"9636version = "4.0.0"
9580source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9637source = "registry+https://github.com/rust-lang/crates.io-index"
9638checksum = "afc65d44c4dd6a8be74194dcac66552dd4e79ee0bcc287349721925e8238177a"
9581dependencies = [9639dependencies = [
9582 "async-trait",9640 "async-trait",
9583 "frame-benchmarking",9641 "frame-benchmarking",
9632 "polkadot-parachain-primitives",9690 "polkadot-parachain-primitives",
9633 "polkadot-primitives",9691 "polkadot-primitives",
9634 "polkadot-rpc",9692 "polkadot-rpc",
9635 "polkadot-runtime",
9636 "polkadot-runtime-common",
9637 "polkadot-runtime-parachains",9693 "polkadot-runtime-parachains",
9638 "polkadot-statement-distribution",9694 "polkadot-statement-distribution",
9639 "rococo-runtime",9695 "rococo-runtime",
9686 "sp-transaction-pool",9742 "sp-transaction-pool",
9687 "sp-version",9743 "sp-version",
9688 "sp-weights",9744 "sp-weights",
9689 "staging-kusama-runtime",
9690 "substrate-prometheus-endpoint",9745 "substrate-prometheus-endpoint",
9691 "thiserror",9746 "thiserror",
9692 "tracing-gum",9747 "tracing-gum",
96959750
9696[[package]]9751[[package]]
9697name = "polkadot-statement-distribution"9752name = "polkadot-statement-distribution"
9698version = "1.0.0"9753version = "4.0.0"
9699source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9754source = "registry+https://github.com/rust-lang/crates.io-index"
9755checksum = "f6992cb6e2ba744752f9f403cb5e0f70ac5431f39f9ea859a3978f22c79799cb"
9700dependencies = [9756dependencies = [
9701 "arrayvec 0.7.4",9757 "arrayvec 0.7.4",
9702 "bitvec",9758 "bitvec",
97199775
9720[[package]]9776[[package]]
9721name = "polkadot-statement-table"9777name = "polkadot-statement-table"
9722version = "1.0.0"9778version = "4.0.0"
9723source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"9779source = "registry+https://github.com/rust-lang/crates.io-index"
9780checksum = "22b2a11cb8871f7e30a8f5e455c92d19a186065644ee00f9acda550ff89dacce"
9724dependencies = [9781dependencies = [
9725 "parity-scale-codec",9782 "parity-scale-codec",
9726 "polkadot-primitives",9783 "polkadot-primitives",
9744]9801]
97459802
9746[[package]]9803[[package]]
9747name = "poly1305"9804name = "polling"
9748version = "0.7.2"9805version = "3.3.0"
9749source = "registry+https://github.com/rust-lang/crates.io-index"9806source = "registry+https://github.com/rust-lang/crates.io-index"
9750checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede"9807checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531"
9751dependencies = [9808dependencies = [
9752 "cpufeatures",9809 "cfg-if",
9753 "opaque-debug 0.3.0",9810 "concurrent-queue",
9811 "pin-project-lite 0.2.13",
9812 "rustix 0.38.25",
9754 "universal-hash 0.4.1",9813 "tracing",
9814 "windows-sys 0.48.0",
9755]9815]
97569816
9757[[package]]9817[[package]]
97919851
9792[[package]]9852[[package]]
9793name = "portable-atomic"9853name = "portable-atomic"
9794version = "1.4.3"9854version = "1.5.1"
9795source = "registry+https://github.com/rust-lang/crates.io-index"9855source = "registry+https://github.com/rust-lang/crates.io-index"
9796checksum = "31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338b"9856checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"
97979857
9798[[package]]9858[[package]]
9859name = "powerfmt"
9860version = "0.2.0"
9861source = "registry+https://github.com/rust-lang/crates.io-index"
9862checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
9863
9864[[package]]
9799name = "ppv-lite86"9865name = "ppv-lite86"
9800version = "0.2.17"9866version = "0.2.17"
9801source = "registry+https://github.com/rust-lang/crates.io-index"9867source = "registry+https://github.com/rust-lang/crates.io-index"
9859checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"9925checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
9860dependencies = [9926dependencies = [
9861 "proc-macro2",9927 "proc-macro2",
9862 "syn 2.0.37",9928 "syn 2.0.39",
9863]9929]
98649930
9865[[package]]9931[[package]]
9866name = "primitive-types"9932name = "primitive-types"
9867version = "0.12.1"9933version = "0.12.2"
9868source = "registry+https://github.com/rust-lang/crates.io-index"9934source = "registry+https://github.com/rust-lang/crates.io-index"
9869checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66"9935checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2"
9870dependencies = [9936dependencies = [
9871 "fixed-hash",9937 "fixed-hash",
9872 "impl-codec",9938 "impl-codec",
98789944
9879[[package]]9945[[package]]
9880name = "prioritized-metered-channel"9946name = "prioritized-metered-channel"
9881version = "0.2.0"9947version = "0.5.1"
9882source = "registry+https://github.com/rust-lang/crates.io-index"9948source = "registry+https://github.com/rust-lang/crates.io-index"
9883checksum = "382698e48a268c832d0b181ed438374a6bb708a82a8ca273bb0f61c74cf209c4"9949checksum = "e99f0c89bd88f393aab44a4ab949351f7bc7e7e1179d11ecbfe50cbe4c47e342"
9884dependencies = [9950dependencies = [
9885 "coarsetime",9951 "coarsetime",
9886 "crossbeam-queue",9952 "crossbeam-queue",
9899checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"9965checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
9900dependencies = [9966dependencies = [
9901 "once_cell",9967 "once_cell",
9902 "toml_edit",9968 "toml_edit 0.19.15",
9903]9969]
99049970
9905[[package]]9971[[package]]
9972name = "proc-macro-crate"
9973version = "2.0.0"
9974source = "registry+https://github.com/rust-lang/crates.io-index"
9975checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
9976dependencies = [
9977 "toml_edit 0.20.7",
9978]
9979
9980[[package]]
9906name = "proc-macro-error"9981name = "proc-macro-error"
9907version = "1.0.4"9982version = "1.0.4"
9908source = "registry+https://github.com/rust-lang/crates.io-index"9983source = "registry+https://github.com/rust-lang/crates.io-index"
9927]10002]
992810003
9929[[package]]10004[[package]]
9930name = "proc-macro-hack"
9931version = "0.5.20+deprecated"
9932source = "registry+https://github.com/rust-lang/crates.io-index"
9933checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
9934
9935[[package]]
9936name = "proc-macro-warning"10005name = "proc-macro-warning"
9937version = "0.4.2"10006version = "1.0.0"
9938source = "registry+https://github.com/rust-lang/crates.io-index"10007source = "registry+https://github.com/rust-lang/crates.io-index"
9939checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e"10008checksum = "9b698b0b09d40e9b7c1a47b132d66a8b54bcd20583d9b6d06e4535e383b4405c"
9940dependencies = [10009dependencies = [
9941 "proc-macro2",10010 "proc-macro2",
9942 "quote",10011 "quote",
9943 "syn 2.0.37",10012 "syn 2.0.39",
9944]10013]
994510014
9946[[package]]10015[[package]]
9947name = "proc-macro2"10016name = "proc-macro2"
9948version = "1.0.67"10017version = "1.0.69"
9949source = "registry+https://github.com/rust-lang/crates.io-index"10018source = "registry+https://github.com/rust-lang/crates.io-index"
9950checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"10019checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
9951dependencies = [10020dependencies = [
9952 "unicode-ident",10021 "unicode-ident",
9953]10022]
9986dependencies = [10055dependencies = [
9987 "proc-macro2",10056 "proc-macro2",
9988 "quote",10057 "quote",
9989 "syn 2.0.37",10058 "syn 2.0.39",
9990]10059]
999110060
9992[[package]]10061[[package]]
1005410123
10055[[package]]10124[[package]]
10056name = "quartz-runtime"10125name = "quartz-runtime"
10057version = "1.1.0"10126version = "1.2.0"
10058dependencies = [10127dependencies = [
10059 "app-promotion-rpc",10128 "app-promotion-rpc",
10060 "cumulus-pallet-aura-ext",10129 "cumulus-pallet-aura-ext",
10130 "pallet-unique",10199 "pallet-unique",
10131 "pallet-utility",10200 "pallet-utility",
10132 "pallet-xcm",10201 "pallet-xcm",
10133 "parachain-info",
10134 "parity-scale-codec",10202 "parity-scale-codec",
10135 "polkadot-parachain-primitives",10203 "polkadot-parachain-primitives",
10204 "polkadot-runtime-common",
10136 "precompile-utils-macro",10205 "precompile-utils-macro",
10137 "scale-info",10206 "scale-info",
10138 "serde",10207 "serde",
10151 "sp-storage",10220 "sp-storage",
10152 "sp-transaction-pool",10221 "sp-transaction-pool",
10153 "sp-version",10222 "sp-version",
10223 "staging-parachain-info",
10154 "staging-xcm",10224 "staging-xcm",
10155 "staging-xcm-builder",10225 "staging-xcm-builder",
10156 "staging-xcm-executor",10226 "staging-xcm-executor",
1020310273
10204[[package]]10274[[package]]
10205name = "quinn-proto"10275name = "quinn-proto"
10206version = "0.9.5"10276version = "0.9.6"
10207source = "registry+https://github.com/rust-lang/crates.io-index"10277source = "registry+https://github.com/rust-lang/crates.io-index"
10208checksum = "c956be1b23f4261676aed05a0046e204e8a6836e50203902683a718af0797989"10278checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863"
10209dependencies = [10279dependencies = [
10210 "bytes",10280 "bytes",
10211 "rand 0.8.5",10281 "rand 0.8.5",
10216 "thiserror",10286 "thiserror",
10217 "tinyvec",10287 "tinyvec",
10218 "tracing",10288 "tracing",
10219 "webpki 0.22.2",10289 "webpki 0.22.4",
10220]10290]
1022110291
10222[[package]]10292[[package]]
10293source = "registry+https://github.com/rust-lang/crates.io-index"10363source = "registry+https://github.com/rust-lang/crates.io-index"
10294checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"10364checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
10295dependencies = [10365dependencies = [
10296 "getrandom 0.2.10",10366 "getrandom 0.2.11",
10297]10367]
1029810368
10299[[package]]10369[[package]]
10370name = "rand_distr"
10371version = "0.4.3"
10372source = "registry+https://github.com/rust-lang/crates.io-index"
10373checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
10374dependencies = [
10375 "num-traits",
10376 "rand 0.8.5",
10377]
10378
10379[[package]]
10300name = "rand_hc"10380name = "rand_hc"
10301version = "0.2.0"10381version = "0.2.0"
10302source = "registry+https://github.com/rust-lang/crates.io-index"10382source = "registry+https://github.com/rust-lang/crates.io-index"
10384]10464]
1038510465
10386[[package]]10466[[package]]
10467name = "redox_syscall"
10468version = "0.4.1"
10469source = "registry+https://github.com/rust-lang/crates.io-index"
10470checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
10471dependencies = [
10472 "bitflags 1.3.2",
10473]
10474
10475[[package]]
10387name = "redox_users"10476name = "redox_users"
10388version = "0.4.3"10477version = "0.4.4"
10389source = "registry+https://github.com/rust-lang/crates.io-index"10478source = "registry+https://github.com/rust-lang/crates.io-index"
10390checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"10479checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
10391dependencies = [10480dependencies = [
10392 "getrandom 0.2.10",10481 "getrandom 0.2.11",
10393 "redox_syscall 0.2.16",10482 "libredox",
10394 "thiserror",10483 "thiserror",
10395]10484]
1039610485
10424dependencies = [10513dependencies = [
10425 "proc-macro2",10514 "proc-macro2",
10426 "quote",10515 "quote",
10427 "syn 2.0.37",10516 "syn 2.0.39",
10428]10517]
1042910518
10430[[package]]10519[[package]]
1044110530
10442[[package]]10531[[package]]
10443name = "regex"10532name = "regex"
10444version = "1.9.6"10533version = "1.10.2"
10445source = "registry+https://github.com/rust-lang/crates.io-index"10534source = "registry+https://github.com/rust-lang/crates.io-index"
10446checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"10535checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
10447dependencies = [10536dependencies = [
10448 "aho-corasick",10537 "aho-corasick",
10449 "memchr",10538 "memchr",
10450 "regex-automata 0.3.9",10539 "regex-automata 0.4.3",
10451 "regex-syntax 0.7.5",10540 "regex-syntax 0.8.2",
10452]10541]
1045310542
10454[[package]]10543[[package]]
1046210551
10463[[package]]10552[[package]]
10464name = "regex-automata"10553name = "regex-automata"
10465version = "0.3.9"10554version = "0.4.3"
10466source = "registry+https://github.com/rust-lang/crates.io-index"10555source = "registry+https://github.com/rust-lang/crates.io-index"
10467checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"10556checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
10468dependencies = [10557dependencies = [
10469 "aho-corasick",10558 "aho-corasick",
10470 "memchr",10559 "memchr",
10471 "regex-syntax 0.7.5",10560 "regex-syntax 0.8.2",
10472]10561]
1047310562
10474[[package]]10563[[package]]
1047910568
10480[[package]]10569[[package]]
10481name = "regex-syntax"10570name = "regex-syntax"
10482version = "0.7.5"10571version = "0.8.2"
10483source = "registry+https://github.com/rust-lang/crates.io-index"10572source = "registry+https://github.com/rust-lang/crates.io-index"
10484checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"10573checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
1048510574
10486[[package]]10575[[package]]
10487name = "resolv-conf"10576name = "resolv-conf"
10511checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"10600checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
10512dependencies = [10601dependencies = [
10513 "hmac 0.12.1",10602 "hmac 0.12.1",
10514 "subtle",10603 "subtle 2.4.1",
10515]10604]
1051610605
10517[[package]]10606[[package]]
10518name = "ring"10607name = "ring"
10519version = "0.1.0"
10520source = "git+https://github.com/w3f/ring-proof?rev=0e948f3#0e948f3c28cbacecdd3020403c4841c0eb339213"
10521dependencies = [
10522 "ark-ec",
10523 "ark-ff",
10524 "ark-poly",
10525 "ark-serialize",
10526 "ark-std",
10527 "common",
10528 "fflonk",
10529 "merlin 3.0.0",
10530]
10531
10532[[package]]
10533name = "ring"
10534version = "0.16.20"10608version = "0.16.20"
10535source = "registry+https://github.com/rust-lang/crates.io-index"10609source = "registry+https://github.com/rust-lang/crates.io-index"
10536checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"10610checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
10539 "libc",10613 "libc",
10540 "once_cell",10614 "once_cell",
10541 "spin 0.5.2",10615 "spin 0.5.2",
10542 "untrusted",10616 "untrusted 0.7.1",
10543 "web-sys",10617 "web-sys",
10544 "winapi",10618 "winapi",
10545]10619]
1054610620
10547[[package]]10621[[package]]
10622name = "ring"
10623version = "0.17.5"
10624source = "registry+https://github.com/rust-lang/crates.io-index"
10625checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
10626dependencies = [
10627 "cc",
10628 "getrandom 0.2.11",
10629 "libc",
10630 "spin 0.9.8",
10631 "untrusted 0.9.0",
10632 "windows-sys 0.48.0",
10633]
10634
10635[[package]]
10548name = "ripemd"10636name = "ripemd"
10549version = "0.1.3"10637version = "0.1.3"
10550source = "registry+https://github.com/rust-lang/crates.io-index"10638source = "registry+https://github.com/rust-lang/crates.io-index"
1058710675
10588[[package]]10676[[package]]
10589name = "rococo-runtime"10677name = "rococo-runtime"
10590version = "1.0.0"10678version = "4.0.0"
10591source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"10679source = "registry+https://github.com/rust-lang/crates.io-index"
10680checksum = "4198843a4ec01f56b58ee26e15df123593da562a07b838c66c4e519dbfc1922d"
10592dependencies = [10681dependencies = [
10593 "binary-merkle-tree",10682 "binary-merkle-tree",
10594 "frame-benchmarking",10683 "frame-benchmarking",
10600 "frame-try-runtime",10689 "frame-try-runtime",
10601 "hex-literal",10690 "hex-literal",
10602 "log",10691 "log",
10692 "pallet-asset-rate",
10603 "pallet-authority-discovery",10693 "pallet-authority-discovery",
10604 "pallet-authorship",10694 "pallet-authorship",
10605 "pallet-babe",10695 "pallet-babe",
10609 "pallet-bounties",10699 "pallet-bounties",
10610 "pallet-child-bounties",10700 "pallet-child-bounties",
10611 "pallet-collective",10701 "pallet-collective",
10702 "pallet-conviction-voting",
10612 "pallet-democracy",10703 "pallet-democracy",
10613 "pallet-elections-phragmen",10704 "pallet-elections-phragmen",
10614 "pallet-grandpa",10705 "pallet-grandpa",
10615 "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0)",10706 "pallet-identity 25.0.0",
10616 "pallet-im-online",10707 "pallet-im-online",
10617 "pallet-indices",10708 "pallet-indices",
10618 "pallet-membership",10709 "pallet-membership",
10623 "pallet-offences",10714 "pallet-offences",
10624 "pallet-preimage",10715 "pallet-preimage",
10625 "pallet-proxy",10716 "pallet-proxy",
10717 "pallet-ranked-collective",
10626 "pallet-recovery",10718 "pallet-recovery",
10719 "pallet-referenda",
10627 "pallet-scheduler",10720 "pallet-scheduler",
10628 "pallet-session",10721 "pallet-session",
10629 "pallet-society",10722 "pallet-society",
10637 "pallet-treasury",10730 "pallet-treasury",
10638 "pallet-utility",10731 "pallet-utility",
10639 "pallet-vesting",10732 "pallet-vesting",
10733 "pallet-whitelist",
10640 "pallet-xcm",10734 "pallet-xcm",
10641 "pallet-xcm-benchmarks",10735 "pallet-xcm-benchmarks",
10642 "parity-scale-codec",10736 "parity-scale-codec",
10650 "serde_derive",10744 "serde_derive",
10651 "smallvec",10745 "smallvec",
10652 "sp-api",10746 "sp-api",
10747 "sp-arithmetic",
10653 "sp-authority-discovery",10748 "sp-authority-discovery",
10654 "sp-block-builder",10749 "sp-block-builder",
10655 "sp-consensus-babe",10750 "sp-consensus-babe",
10656 "sp-consensus-beefy",10751 "sp-consensus-beefy",
10657 "sp-core",10752 "sp-core",
10753 "sp-genesis-builder",
10658 "sp-inherents",10754 "sp-inherents",
10659 "sp-io",10755 "sp-io",
10660 "sp-mmr-primitives",10756 "sp-mmr-primitives",
1067510771
10676[[package]]10772[[package]]
10677name = "rococo-runtime-constants"10773name = "rococo-runtime-constants"
10678version = "1.0.0"10774version = "4.0.0"
10679source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"10775source = "registry+https://github.com/rust-lang/crates.io-index"
10776checksum = "272eaa4f1b4b5357d89d1f8f504cb5ee81a105bf7e5c295f053c6e521f2a199b"
10680dependencies = [10777dependencies = [
10681 "frame-support",10778 "frame-support",
10682 "polkadot-primitives",10779 "polkadot-primitives",
10685 "sp-core",10782 "sp-core",
10686 "sp-runtime",10783 "sp-runtime",
10687 "sp-weights",10784 "sp-weights",
10785 "staging-xcm",
10688]10786]
1068910787
10690[[package]]10788[[package]]
10691name = "rpassword"10789name = "rpassword"
10692version = "7.2.0"10790version = "7.3.1"
10693source = "registry+https://github.com/rust-lang/crates.io-index"10791source = "registry+https://github.com/rust-lang/crates.io-index"
10694checksum = "6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322"10792checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f"
10695dependencies = [10793dependencies = [
10696 "libc",10794 "libc",
10697 "rtoolbox",10795 "rtoolbox",
10698 "winapi",10796 "windows-sys 0.48.0",
10699]10797]
1070010798
10701[[package]]10799[[package]]
1072610824
10727[[package]]10825[[package]]
10728name = "rtoolbox"10826name = "rtoolbox"
10729version = "0.0.1"10827version = "0.0.2"
10730source = "registry+https://github.com/rust-lang/crates.io-index"10828source = "registry+https://github.com/rust-lang/crates.io-index"
10731checksum = "034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524a"10829checksum = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e"
10732dependencies = [10830dependencies = [
10733 "libc",10831 "libc",
10734 "winapi",10832 "windows-sys 0.48.0",
10735]10833]
1073610834
10737[[package]]10835[[package]]
10772source = "registry+https://github.com/rust-lang/crates.io-index"10870source = "registry+https://github.com/rust-lang/crates.io-index"
10773checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"10871checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
10774dependencies = [10872dependencies = [
10775 "semver 1.0.19",10873 "semver 1.0.20",
10776]10874]
1077710875
10778[[package]]10876[[package]]
1078610884
10787[[package]]10885[[package]]
10788name = "rustix"10886name = "rustix"
10789version = "0.36.15"10887version = "0.36.17"
10790source = "registry+https://github.com/rust-lang/crates.io-index"10888source = "registry+https://github.com/rust-lang/crates.io-index"
10791checksum = "c37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941"10889checksum = "305efbd14fde4139eb501df5f136994bb520b033fa9fbdce287507dc23b8c7ed"
10792dependencies = [10890dependencies = [
10793 "bitflags 1.3.2",10891 "bitflags 1.3.2",
10794 "errno",10892 "errno",
1080010898
10801[[package]]10899[[package]]
10802name = "rustix"10900name = "rustix"
10803version = "0.37.24"10901version = "0.37.27"
10804source = "registry+https://github.com/rust-lang/crates.io-index"10902source = "registry+https://github.com/rust-lang/crates.io-index"
10805checksum = "4279d76516df406a8bd37e7dff53fd37d1a093f997a3c34a5c21658c126db06d"10903checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
10806dependencies = [10904dependencies = [
10807 "bitflags 1.3.2",10905 "bitflags 1.3.2",
10808 "errno",10906 "errno",
1081410912
10815[[package]]10913[[package]]
10816name = "rustix"10914name = "rustix"
10817version = "0.38.15"10915version = "0.38.25"
10818source = "registry+https://github.com/rust-lang/crates.io-index"10916source = "registry+https://github.com/rust-lang/crates.io-index"
10819checksum = "d2f9da0cbd88f9f09e7814e388301c8414c51c62aa6ce1e4b5c551d49d96e531"10917checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
10820dependencies = [10918dependencies = [
10821 "bitflags 2.4.0",10919 "bitflags 2.4.1",
10822 "errno",10920 "errno",
10823 "libc",10921 "libc",
10824 "linux-raw-sys 0.4.8",10922 "linux-raw-sys 0.4.11",
10825 "windows-sys 0.48.0",10923 "windows-sys 0.48.0",
10826]10924]
1082710925
10846dependencies = [10944dependencies = [
10847 "log",10945 "log",
10848 "ring 0.16.20",10946 "ring 0.16.20",
10849 "sct 0.7.0",10947 "sct 0.7.1",
10850 "webpki 0.22.2",10948 "webpki 0.22.4",
10851]10949]
1085210950
10853[[package]]10951[[package]]
10854name = "rustls"10952name = "rustls"
10855version = "0.21.7"10953version = "0.21.9"
10856source = "registry+https://github.com/rust-lang/crates.io-index"10954source = "registry+https://github.com/rust-lang/crates.io-index"
10857checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"10955checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
10858dependencies = [10956dependencies = [
10859 "log",10957 "log",
10860 "ring 0.16.20",10958 "ring 0.17.5",
10861 "rustls-webpki 0.101.6",10959 "rustls-webpki",
10862 "sct 0.7.0",10960 "sct 0.7.1",
10863]10961]
1086410962
10865[[package]]10963[[package]]
1087610974
10877[[package]]10975[[package]]
10878name = "rustls-pemfile"10976name = "rustls-pemfile"
10879version = "1.0.3"10977version = "1.0.4"
10880source = "registry+https://github.com/rust-lang/crates.io-index"10978source = "registry+https://github.com/rust-lang/crates.io-index"
10881checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"10979checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
10882dependencies = [10980dependencies = [
10883 "base64 0.21.4",10981 "base64 0.21.5",
10884]10982]
1088510983
10886[[package]]10984[[package]]
10887name = "rustls-webpki"10985name = "rustls-webpki"
10888version = "0.100.3"10986version = "0.101.7"
10889source = "registry+https://github.com/rust-lang/crates.io-index"10987source = "registry+https://github.com/rust-lang/crates.io-index"
10890checksum = "5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3"10988checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
10891dependencies = [10989dependencies = [
10892 "ring 0.16.20",10990 "ring 0.17.5",
10893 "untrusted",10991 "untrusted 0.9.0",
10894]10992]
1089510993
10896[[package]]10994[[package]]
10897name = "rustls-webpki"
10898version = "0.101.6"
10899source = "registry+https://github.com/rust-lang/crates.io-index"
10900checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
10901dependencies = [
10902 "ring 0.16.20",
10903 "untrusted",
10904]
10905
10906[[package]]
10907name = "rustversion"10995name = "rustversion"
10908version = "1.0.14"10996version = "1.0.14"
10909source = "registry+https://github.com/rust-lang/crates.io-index"10997source = "registry+https://github.com/rust-lang/crates.io-index"
1095711045
10958[[package]]11046[[package]]
10959name = "sc-allocator"11047name = "sc-allocator"
10960version = "4.1.0-dev"11048version = "20.0.0"
10961source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11049source = "registry+https://github.com/rust-lang/crates.io-index"
11050checksum = "66b4c5976a9cff7fcf24c946276a62ea7837862b6f3bf9f8011f08faf4f08474"
10962dependencies = [11051dependencies = [
10963 "log",11052 "log",
10964 "sp-core",11053 "sp-core",
1096811057
10969[[package]]11058[[package]]
10970name = "sc-authority-discovery"11059name = "sc-authority-discovery"
10971version = "0.10.0-dev"11060version = "0.31.0"
10972source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11061source = "registry+https://github.com/rust-lang/crates.io-index"
11062checksum = "fb7e0e8a4ea5304b65d49c0085a458ed2e43394f95457689875d3e0c6e118dee"
10973dependencies = [11063dependencies = [
10974 "async-trait",11064 "async-trait",
10975 "futures",11065 "futures",
1099611086
10997[[package]]11087[[package]]
10998name = "sc-basic-authorship"11088name = "sc-basic-authorship"
10999version = "0.10.0-dev"11089version = "0.31.0"
11000source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11090source = "registry+https://github.com/rust-lang/crates.io-index"
11091checksum = "b0aa6c85e3e0b5af9cab7078166d8c4575b7b9edac0ade6be1aadee828420104"
11001dependencies = [11092dependencies = [
11002 "futures",11093 "futures",
11003 "futures-timer",11094 "futures-timer",
1101911110
11020[[package]]11111[[package]]
11021name = "sc-block-builder"11112name = "sc-block-builder"
11022version = "0.10.0-dev"11113version = "0.30.0"
11023source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11114source = "registry+https://github.com/rust-lang/crates.io-index"
11115checksum = "9d3999b9b758c09a6c1155e481b683ee87712f071cc5a0679f9ee4906a14a404"
11024dependencies = [11116dependencies = [
11025 "parity-scale-codec",11117 "parity-scale-codec",
11026 "sc-client-api",11118 "sc-client-api",
1103411126
11035[[package]]11127[[package]]
11036name = "sc-chain-spec"11128name = "sc-chain-spec"
11037version = "4.0.0-dev"11129version = "24.0.0"
11038source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11130source = "registry+https://github.com/rust-lang/crates.io-index"
11131checksum = "ec7e711ea9870d3fb8e2a3ea5b601a9e20c63d0d2f457f40146407721e246a77"
11039dependencies = [11132dependencies = [
11040 "memmap2",11133 "memmap2",
11041 "sc-chain-spec-derive",11134 "sc-chain-spec-derive",
1105311146
11054[[package]]11147[[package]]
11055name = "sc-chain-spec-derive"11148name = "sc-chain-spec-derive"
11056version = "4.0.0-dev"11149version = "10.0.0"
11057source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11150source = "registry+https://github.com/rust-lang/crates.io-index"
11151checksum = "1f25158f791eb48715da9322375598b541cadd1f193674e8a4d77c79ffa3d95d"
11058dependencies = [11152dependencies = [
11059 "proc-macro-crate",11153 "proc-macro-crate 1.3.1",
11060 "proc-macro2",11154 "proc-macro2",
11061 "quote",11155 "quote",
11062 "syn 2.0.37",11156 "syn 2.0.39",
11063]11157]
1106411158
11065[[package]]11159[[package]]
11066name = "sc-cli"11160name = "sc-cli"
11067version = "0.10.0-dev"11161version = "0.33.0"
11068source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11162source = "registry+https://github.com/rust-lang/crates.io-index"
11163checksum = "22c61058223f80c1f961b03f7737529609a3283eef91129e971a1966101c18ea"
11069dependencies = [11164dependencies = [
11070 "array-bytes",11165 "array-bytes 6.2.0",
11071 "chrono",11166 "chrono",
11072 "clap",11167 "clap",
11073 "fdlimit",11168 "fdlimit",
11082 "sc-client-api",11177 "sc-client-api",
11083 "sc-client-db",11178 "sc-client-db",
11084 "sc-keystore",11179 "sc-keystore",
11180 "sc-mixnet",
11085 "sc-network",11181 "sc-network",
11086 "sc-service",11182 "sc-service",
11087 "sc-telemetry",11183 "sc-telemetry",
1110311199
11104[[package]]11200[[package]]
11105name = "sc-client-api"11201name = "sc-client-api"
11106version = "4.0.0-dev"11202version = "25.0.0"
11107source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11203source = "registry+https://github.com/rust-lang/crates.io-index"
11204checksum = "c7d32101f415f4d7ddbe8b5de1c1387a78d6dce070e26407ec605fe9f3fc9e23"
11108dependencies = [11205dependencies = [
11109 "fnv",11206 "fnv",
11110 "futures",11207 "futures",
11124 "sp-state-machine",11221 "sp-state-machine",
11125 "sp-statement-store",11222 "sp-statement-store",
11126 "sp-storage",11223 "sp-storage",
11224 "sp-trie",
11127 "substrate-prometheus-endpoint",11225 "substrate-prometheus-endpoint",
11128]11226]
1112911227
11130[[package]]11228[[package]]
11131name = "sc-client-db"11229name = "sc-client-db"
11132version = "0.10.0-dev"11230version = "0.32.0"
11133source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11231source = "registry+https://github.com/rust-lang/crates.io-index"
11232checksum = "d4ced79f609a44782874d856cf39d256838957195ef34f4fb8ced90bf4b725d0"
11134dependencies = [11233dependencies = [
11135 "hash-db 0.16.0",11234 "hash-db 0.16.0",
11136 "kvdb",11235 "kvdb",
1115511254
11156[[package]]11255[[package]]
11157name = "sc-consensus"11256name = "sc-consensus"
11158version = "0.10.0-dev"11257version = "0.30.0"
11159source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11258source = "registry+https://github.com/rust-lang/crates.io-index"
11259checksum = "86e4100cc8fb3876708e1ec5a7c63af3baa75febd5051beb9ddd1e4835fdfc27"
11160dependencies = [11260dependencies = [
11161 "async-trait",11261 "async-trait",
11162 "futures",11262 "futures",
1118011280
11181[[package]]11281[[package]]
11182name = "sc-consensus-aura"11282name = "sc-consensus-aura"
11183version = "0.10.0-dev"11283version = "0.31.0"
11184source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11284source = "registry+https://github.com/rust-lang/crates.io-index"
11285checksum = "5e3e282836a7deeeb71d965a0942828f81ae2b03fd67515b733d5f33dd5da855"
11185dependencies = [11286dependencies = [
11186 "async-trait",11287 "async-trait",
11187 "futures",11288 "futures",
1120911310
11210[[package]]11311[[package]]
11211name = "sc-consensus-babe"11312name = "sc-consensus-babe"
11212version = "0.10.0-dev"11313version = "0.31.0"
11213source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11314source = "registry+https://github.com/rust-lang/crates.io-index"
11315checksum = "9a48ef5eaf7bffc647dfdfd42c7c02a929d89410b065beeb80753fd94f5fe70d"
11214dependencies = [11316dependencies = [
11215 "async-trait",11317 "async-trait",
11216 "fork-tree",11318 "fork-tree",
11227 "sc-consensus-slots",11329 "sc-consensus-slots",
11228 "sc-telemetry",11330 "sc-telemetry",
11229 "sc-transaction-pool-api",11331 "sc-transaction-pool-api",
11230 "scale-info",
11231 "sp-api",11332 "sp-api",
11232 "sp-application-crypto",11333 "sp-application-crypto",
11233 "sp-block-builder",11334 "sp-block-builder",
1124511346
11246[[package]]11347[[package]]
11247name = "sc-consensus-babe-rpc"11348name = "sc-consensus-babe-rpc"
11248version = "0.10.0-dev"11349version = "0.31.0"
11249source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11350source = "registry+https://github.com/rust-lang/crates.io-index"
11351checksum = "4a78a543d8d2e8d9a6a8b60f16ac12e6fbeffbc2322ef8fa139f733ce53ccaa8"
11250dependencies = [11352dependencies = [
11251 "futures",11353 "futures",
11252 "jsonrpsee",11354 "jsonrpsee",
1126711369
11268[[package]]11370[[package]]
11269name = "sc-consensus-beefy"11371name = "sc-consensus-beefy"
11270version = "4.0.0-dev"11372version = "10.0.0"
11271source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11373source = "registry+https://github.com/rust-lang/crates.io-index"
11374checksum = "a3709a96723feaeb7a7ca0d3f7995d084029f8effeeb09d45975a8aa3ba1a63b"
11272dependencies = [11375dependencies = [
11273 "array-bytes",11376 "array-bytes 6.2.0",
11274 "async-channel",11377 "async-channel 1.9.0",
11275 "async-trait",11378 "async-trait",
11276 "fnv",11379 "fnv",
11277 "futures",11380 "futures",
1130111404
11302[[package]]11405[[package]]
11303name = "sc-consensus-beefy-rpc"11406name = "sc-consensus-beefy-rpc"
11304version = "4.0.0-dev"11407version = "10.0.0"
11305source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11408source = "registry+https://github.com/rust-lang/crates.io-index"
11409checksum = "c1699fe1791dd985a5dd6075c84136027eb3e2ccff46d3e5273fdbd5b246f763"
11306dependencies = [11410dependencies = [
11307 "futures",11411 "futures",
11308 "jsonrpsee",11412 "jsonrpsee",
1132011424
11321[[package]]11425[[package]]
11322name = "sc-consensus-epochs"11426name = "sc-consensus-epochs"
11323version = "0.10.0-dev"11427version = "0.30.0"
11324source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11428source = "registry+https://github.com/rust-lang/crates.io-index"
11429checksum = "5eafc0534bb118f614fc50fe066e423dbecfedf816cd9c43e0b492e30c1782c8"
11325dependencies = [11430dependencies = [
11326 "fork-tree",11431 "fork-tree",
11327 "parity-scale-codec",11432 "parity-scale-codec",
1133311438
11334[[package]]11439[[package]]
11335name = "sc-consensus-grandpa"11440name = "sc-consensus-grandpa"
11336version = "0.10.0-dev"11441version = "0.16.0"
11337source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11442source = "registry+https://github.com/rust-lang/crates.io-index"
11443checksum = "30cbc5db21ea2c4ba65b23315e73e69e8155630fb47c84b93d40b0e759c9d86d"
11338dependencies = [11444dependencies = [
11339 "ahash 0.8.3",11445 "ahash 0.8.6",
11340 "array-bytes",11446 "array-bytes 6.2.0",
11341 "async-trait",11447 "async-trait",
11342 "dyn-clone",11448 "dyn-clone",
11343 "finality-grandpa",11449 "finality-grandpa",
1137411480
11375[[package]]11481[[package]]
11376name = "sc-consensus-grandpa-rpc"11482name = "sc-consensus-grandpa-rpc"
11377version = "0.10.0-dev"11483version = "0.16.0"
11378source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11484source = "registry+https://github.com/rust-lang/crates.io-index"
11485checksum = "a3c545dac29d5dd002170e063ca0725be95ef653be135d251f91dbe053f63173"
11379dependencies = [11486dependencies = [
11380 "finality-grandpa",11487 "finality-grandpa",
11381 "futures",11488 "futures",
1139411501
11395[[package]]11502[[package]]
11396name = "sc-consensus-manual-seal"11503name = "sc-consensus-manual-seal"
11397version = "0.10.0-dev"11504version = "0.32.0"
11398source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11505source = "registry+https://github.com/rust-lang/crates.io-index"
11506checksum = "cc7577e49019ece17432c51ddbd4f6b02829b1f784a72b7064855ad70dc08b3f"
11399dependencies = [11507dependencies = [
11400 "assert_matches",11508 "assert_matches",
11401 "async-trait",11509 "async-trait",
1142911537
11430[[package]]11538[[package]]
11431name = "sc-consensus-slots"11539name = "sc-consensus-slots"
11432version = "0.10.0-dev"11540version = "0.30.0"
11433source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11541source = "registry+https://github.com/rust-lang/crates.io-index"
11542checksum = "2059681962e33394682627e7bd7245b5094236594f5c97c4c96988d901bda534"
11434dependencies = [11543dependencies = [
11435 "async-trait",11544 "async-trait",
11436 "futures",11545 "futures",
1145211561
11453[[package]]11562[[package]]
11454name = "sc-executor"11563name = "sc-executor"
11455version = "0.10.0-dev"11564version = "0.29.0"
11456source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11565source = "registry+https://github.com/rust-lang/crates.io-index"
11566checksum = "225f2ad733bc7234a6638d5203624194824b2f78ab631bc911223f536a66b9c8"
11457dependencies = [11567dependencies = [
11458 "parity-scale-codec",11568 "parity-scale-codec",
11459 "parking_lot 0.12.1",11569 "parking_lot 0.12.1",
1147411584
11475[[package]]11585[[package]]
11476name = "sc-executor-common"11586name = "sc-executor-common"
11477version = "0.10.0-dev"11587version = "0.26.0"
11478source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11588source = "registry+https://github.com/rust-lang/crates.io-index"
11589checksum = "169c1cfe81ba0e0d44ab4ada1600e30b6a9de588c792db73e32a854a6e3e1a87"
11479dependencies = [11590dependencies = [
11480 "sc-allocator",11591 "sc-allocator",
11481 "sp-maybe-compressed-blob",11592 "sp-maybe-compressed-blob",
1148611597
11487[[package]]11598[[package]]
11488name = "sc-executor-wasmtime"11599name = "sc-executor-wasmtime"
11489version = "0.10.0-dev"11600version = "0.26.0"
11490source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11601source = "registry+https://github.com/rust-lang/crates.io-index"
11602checksum = "f9167d733e928c528273be63b905ec750cfda85d740453071463da69f7d633bc"
11491dependencies = [11603dependencies = [
11492 "anyhow",11604 "anyhow",
11493 "cfg-if",11605 "cfg-if",
11494 "libc",11606 "libc",
11495 "log",11607 "log",
11496 "rustix 0.36.15",11608 "parking_lot 0.12.1",
11609 "rustix 0.36.17",
11497 "sc-allocator",11610 "sc-allocator",
11498 "sc-executor-common",11611 "sc-executor-common",
11499 "sp-runtime-interface",11612 "sp-runtime-interface",
1150311616
11504[[package]]11617[[package]]
11505name = "sc-informant"11618name = "sc-informant"
11506version = "0.10.0-dev"11619version = "0.30.0"
11507source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11620source = "registry+https://github.com/rust-lang/crates.io-index"
11621checksum = "7189a0b95fe5d79895a107c6c057bc9351cd9c867552200815199cde25bcdb9d"
11508dependencies = [11622dependencies = [
11509 "ansi_term",11623 "ansi_term",
11510 "futures",11624 "futures",
1151911633
11520[[package]]11634[[package]]
11521name = "sc-keystore"11635name = "sc-keystore"
11522version = "4.0.0-dev"11636version = "22.0.0"
11523source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11637source = "registry+https://github.com/rust-lang/crates.io-index"
11638checksum = "abecdf9778fccc254c0b5e227ea8b90fd59247044a30ad293a068b180427d244"
11524dependencies = [11639dependencies = [
11525 "array-bytes",11640 "array-bytes 6.2.0",
11526 "parking_lot 0.12.1",11641 "parking_lot 0.12.1",
11527 "serde_json",11642 "serde_json",
11528 "sp-application-crypto",11643 "sp-application-crypto",
11532]11647]
1153311648
11534[[package]]11649[[package]]
11650name = "sc-mixnet"
11651version = "0.1.0"
11652source = "registry+https://github.com/rust-lang/crates.io-index"
11653checksum = "d53ea71ec60601c18d6adcaf7a62698fc2e886c16dc8fdf8d61b3b76244dea38"
11654dependencies = [
11655 "array-bytes 4.2.0",
11656 "arrayvec 0.7.4",
11657 "blake2 0.10.6",
11658 "futures",
11659 "futures-timer",
11660 "libp2p-identity",
11661 "log",
11662 "mixnet",
11663 "multiaddr",
11664 "parity-scale-codec",
11665 "parking_lot 0.12.1",
11666 "sc-client-api",
11667 "sc-network",
11668 "sc-transaction-pool-api",
11669 "sp-api",
11670 "sp-consensus",
11671 "sp-core",
11672 "sp-keystore",
11673 "sp-mixnet",
11674 "sp-runtime",
11675 "thiserror",
11676]
11677
11678[[package]]
11535name = "sc-network"11679name = "sc-network"
11536version = "0.10.0-dev"11680version = "0.31.0"
11537source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11681source = "registry+https://github.com/rust-lang/crates.io-index"
11682checksum = "01f519592a971199c486d412dbf38ba54096857080bf4b9d29c9ffabcfee3745"
11538dependencies = [11683dependencies = [
11539 "array-bytes",11684 "array-bytes 6.2.0",
11540 "async-channel",11685 "async-channel 1.9.0",
11541 "async-trait",11686 "async-trait",
11542 "asynchronous-codec",11687 "asynchronous-codec",
11543 "bytes",11688 "bytes",
1157411719
11575[[package]]11720[[package]]
11576name = "sc-network-bitswap"11721name = "sc-network-bitswap"
11577version = "0.10.0-dev"11722version = "0.30.0"
11578source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11723source = "registry+https://github.com/rust-lang/crates.io-index"
11724checksum = "8fe63a55e03d8bc796ff1e94e7fb62a62acfd7a80a47865a97b55c13371c3e05"
11579dependencies = [11725dependencies = [
11580 "async-channel",11726 "async-channel 1.9.0",
11581 "cid",11727 "cid",
11582 "futures",11728 "futures",
11583 "libp2p-identity",11729 "libp2p-identity",
1159411740
11595[[package]]11741[[package]]
11596name = "sc-network-common"11742name = "sc-network-common"
11597version = "0.10.0-dev"11743version = "0.30.0"
11598source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11744source = "registry+https://github.com/rust-lang/crates.io-index"
11745checksum = "8d236686d15275e4aa49ca929a06fb6fac28aa70e35ee185b981036c149f9e9d"
11599dependencies = [11746dependencies = [
11600 "async-trait",11747 "async-trait",
11601 "bitflags 1.3.2",11748 "bitflags 1.3.2",
1161111758
11612[[package]]11759[[package]]
11613name = "sc-network-gossip"11760name = "sc-network-gossip"
11614version = "0.10.0-dev"11761version = "0.31.0"
11615source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11762source = "registry+https://github.com/rust-lang/crates.io-index"
11763checksum = "b884a9f7cd348c4c1899c0bbf95237e39dffba4baec48d4b98c1046f6bb04fa5"
11616dependencies = [11764dependencies = [
11617 "ahash 0.8.3",11765 "ahash 0.8.6",
11618 "futures",11766 "futures",
11619 "futures-timer",11767 "futures-timer",
11620 "libp2p",11768 "libp2p",
1162911777
11630[[package]]11778[[package]]
11631name = "sc-network-light"11779name = "sc-network-light"
11632version = "0.10.0-dev"11780version = "0.30.0"
11633source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11781source = "registry+https://github.com/rust-lang/crates.io-index"
11782checksum = "aac888fd720ef8bb2ff7d2b7f7b2e54d17bb85a417cf1e1b6f0f64f7e644936d"
11634dependencies = [11783dependencies = [
11635 "array-bytes",11784 "array-bytes 6.2.0",
11636 "async-channel",11785 "async-channel 1.9.0",
11637 "futures",11786 "futures",
11638 "libp2p-identity",11787 "libp2p-identity",
11639 "log",11788 "log",
1165011799
11651[[package]]11800[[package]]
11652name = "sc-network-sync"11801name = "sc-network-sync"
11653version = "0.10.0-dev"11802version = "0.30.0"
11654source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11803source = "registry+https://github.com/rust-lang/crates.io-index"
11804checksum = "10c697aa8f52cf194b9f00113a7d0d3ce5d1456bedd6169a9caae10737f02907"
11655dependencies = [11805dependencies = [
11656 "array-bytes",11806 "array-bytes 6.2.0",
11657 "async-channel",11807 "async-channel 1.9.0",
11658 "async-trait",11808 "async-trait",
11659 "fork-tree",11809 "fork-tree",
11660 "futures",11810 "futures",
11680 "sp-runtime",11830 "sp-runtime",
11681 "substrate-prometheus-endpoint",11831 "substrate-prometheus-endpoint",
11682 "thiserror",11832 "thiserror",
11833 "tokio-stream",
11683]11834]
1168411835
11685[[package]]11836[[package]]
11686name = "sc-network-transactions"11837name = "sc-network-transactions"
11687version = "0.10.0-dev"11838version = "0.30.0"
11688source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11839source = "registry+https://github.com/rust-lang/crates.io-index"
11840checksum = "bb7c9bfc7b58ce229d1512158b8f13dc849ec24857d1c29a41a867fb8afb5c09"
11689dependencies = [11841dependencies = [
11690 "array-bytes",11842 "array-bytes 6.2.0",
11691 "futures",11843 "futures",
11692 "libp2p",11844 "libp2p",
11693 "log",11845 "log",
1170211854
11703[[package]]11855[[package]]
11704name = "sc-offchain"11856name = "sc-offchain"
11705version = "4.0.0-dev"11857version = "26.0.0"
11706source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11858source = "registry+https://github.com/rust-lang/crates.io-index"
11859checksum = "47950facab8dedf71c39667ccce8834252944e8f091f3a3bcdfc0b4503573da4"
11707dependencies = [11860dependencies = [
11708 "array-bytes",11861 "array-bytes 6.2.0",
11709 "bytes",11862 "bytes",
11710 "fnv",11863 "fnv",
11711 "futures",11864 "futures",
1173611889
11737[[package]]11890[[package]]
11738name = "sc-proposer-metrics"11891name = "sc-proposer-metrics"
11739version = "0.10.0-dev"11892version = "0.16.0"
11740source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11893source = "registry+https://github.com/rust-lang/crates.io-index"
11894checksum = "221845dce4e7adb57eca5f73318699b377cff29aef92a586e71aa5cef62f879b"
11741dependencies = [11895dependencies = [
11742 "log",11896 "log",
11743 "substrate-prometheus-endpoint",11897 "substrate-prometheus-endpoint",
11744]11898]
1174511899
11746[[package]]11900[[package]]
11747name = "sc-rpc"11901name = "sc-rpc"
11748version = "4.0.0-dev"11902version = "26.0.0"
11749source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11903source = "registry+https://github.com/rust-lang/crates.io-index"
11904checksum = "eb277280b6b3519e4a2e693b75d4ca516ebb4a928162e6a1791b217b2be60c9f"
11750dependencies = [11905dependencies = [
11751 "futures",11906 "futures",
11752 "jsonrpsee",11907 "jsonrpsee",
11756 "sc-block-builder",11911 "sc-block-builder",
11757 "sc-chain-spec",11912 "sc-chain-spec",
11758 "sc-client-api",11913 "sc-client-api",
11914 "sc-mixnet",
11759 "sc-rpc-api",11915 "sc-rpc-api",
11760 "sc-tracing",11916 "sc-tracing",
11761 "sc-transaction-pool-api",11917 "sc-transaction-pool-api",
1177611932
11777[[package]]11933[[package]]
11778name = "sc-rpc-api"11934name = "sc-rpc-api"
11779version = "0.10.0-dev"11935version = "0.30.0"
11780source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11936source = "registry+https://github.com/rust-lang/crates.io-index"
11937checksum = "def499ac717db8442fe18543e52330d5f105027b666df73c0b38e81e9105078b"
11781dependencies = [11938dependencies = [
11782 "jsonrpsee",11939 "jsonrpsee",
11783 "parity-scale-codec",11940 "parity-scale-codec",
11784 "sc-chain-spec",11941 "sc-chain-spec",
11942 "sc-mixnet",
11785 "sc-transaction-pool-api",11943 "sc-transaction-pool-api",
11786 "scale-info",11944 "scale-info",
11787 "serde",11945 "serde",
1179511953
11796[[package]]11954[[package]]
11797name = "sc-rpc-server"11955name = "sc-rpc-server"
11798version = "4.0.0-dev"11956version = "10.0.0"
11799source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11957source = "registry+https://github.com/rust-lang/crates.io-index"
11958checksum = "9e8083e1b026dcf397f8c1122b3fba6cc744c6962996df6a30e0fb75223f7637"
11800dependencies = [11959dependencies = [
11801 "http",11960 "http",
11802 "jsonrpsee",11961 "jsonrpsee",
1181011969
11811[[package]]11970[[package]]
11812name = "sc-rpc-spec-v2"11971name = "sc-rpc-spec-v2"
11813version = "0.10.0-dev"11972version = "0.31.0"
11814source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"11973source = "registry+https://github.com/rust-lang/crates.io-index"
11974checksum = "198ea9287111b4060ce1d70dce99804b99d1a92b5fb23a79d94bf0cb460ca3ce"
11815dependencies = [11975dependencies = [
11816 "array-bytes",11976 "array-bytes 6.2.0",
11817 "futures",11977 "futures",
11818 "futures-util",11978 "futures-util",
11819 "hex",11979 "hex",
1183811998
11839[[package]]11999[[package]]
11840name = "sc-service"12000name = "sc-service"
11841version = "0.10.0-dev"12001version = "0.32.0"
11842source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12002source = "registry+https://github.com/rust-lang/crates.io-index"
12003checksum = "3623ae5bd7b089da9796a3f1edd974c94f34dd4b4b527146662ef409ae9cd38c"
11843dependencies = [12004dependencies = [
11844 "async-trait",12005 "async-trait",
11845 "directories",12006 "directories",
1190212063
11903[[package]]12064[[package]]
11904name = "sc-state-db"12065name = "sc-state-db"
11905version = "0.10.0-dev"12066version = "0.27.0"
11906source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12067source = "registry+https://github.com/rust-lang/crates.io-index"
12068checksum = "3635fe572adfe796886e18910c8b94f7ce67f9ae3e2c161176e122ddf0baa7e4"
11907dependencies = [12069dependencies = [
11908 "log",12070 "log",
11909 "parity-scale-codec",12071 "parity-scale-codec",
1191312075
11914[[package]]12076[[package]]
11915name = "sc-storage-monitor"12077name = "sc-storage-monitor"
11916version = "0.1.0"12078version = "0.13.0"
11917source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12079source = "registry+https://github.com/rust-lang/crates.io-index"
12080checksum = "0f9acfc934aa5b0185e861ce81245685086c7231fcb2b582da4afc4d0bd62a98"
11918dependencies = [12081dependencies = [
11919 "clap",12082 "clap",
11920 "fs4",12083 "fs4",
1192712090
11928[[package]]12091[[package]]
11929name = "sc-sync-state-rpc"12092name = "sc-sync-state-rpc"
11930version = "0.10.0-dev"12093version = "0.31.0"
11931source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12094source = "registry+https://github.com/rust-lang/crates.io-index"
12095checksum = "fe1efc0811813b73b9bb6eccc630ccd43d13b4306255a41ef55b9304d32e64c2"
11932dependencies = [12096dependencies = [
11933 "jsonrpsee",12097 "jsonrpsee",
11934 "parity-scale-codec",12098 "parity-scale-codec",
1194612110
11947[[package]]12111[[package]]
11948name = "sc-sysinfo"12112name = "sc-sysinfo"
11949version = "6.0.0-dev"12113version = "24.0.0"
11950source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12114source = "registry+https://github.com/rust-lang/crates.io-index"
12115checksum = "60967710b85e650652832df73915b64c315f7b437e53c4635bd26106d6d05c21"
11951dependencies = [12116dependencies = [
11952 "futures",12117 "futures",
11953 "libc",12118 "libc",
1196512130
11966[[package]]12131[[package]]
11967name = "sc-telemetry"12132name = "sc-telemetry"
11968version = "4.0.0-dev"12133version = "12.0.0"
11969source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12134source = "registry+https://github.com/rust-lang/crates.io-index"
12135checksum = "28e214e4d46cac02321bc3dc6fd72f019ac10819d1ac8f24f6935a4ae74ef273"
11970dependencies = [12136dependencies = [
11971 "chrono",12137 "chrono",
11972 "futures",12138 "futures",
1198412150
11985[[package]]12151[[package]]
11986name = "sc-tracing"12152name = "sc-tracing"
11987version = "4.0.0-dev"12153version = "25.0.0"
11988source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12154source = "registry+https://github.com/rust-lang/crates.io-index"
12155checksum = "83bcd745ea216ba0c0a344cff2c41b12e27846d5fca4b28f56ff77e1d3ff3634"
11989dependencies = [12156dependencies = [
11990 "ansi_term",12157 "ansi_term",
11991 "atty",12158 "atty",
1201312180
12014[[package]]12181[[package]]
12015name = "sc-tracing-proc-macro"12182name = "sc-tracing-proc-macro"
12016version = "4.0.0-dev"12183version = "10.0.0"
12017source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12184source = "registry+https://github.com/rust-lang/crates.io-index"
12185checksum = "9c4ae9e4f957d7274ac6b59d667b66262caf6482dbb1b63f1c370528626b1272"
12018dependencies = [12186dependencies = [
12019 "proc-macro-crate",12187 "proc-macro-crate 1.3.1",
12020 "proc-macro2",12188 "proc-macro2",
12021 "quote",12189 "quote",
12022 "syn 2.0.37",12190 "syn 2.0.39",
12023]12191]
1202412192
12025[[package]]12193[[package]]
12026name = "sc-transaction-pool"12194name = "sc-transaction-pool"
12027version = "4.0.0-dev"12195version = "25.0.0"
12028source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12196source = "registry+https://github.com/rust-lang/crates.io-index"
12197checksum = "6f6db45a057a619670e07deefb4e69aab83386f076363db424907da2b2e82590"
12029dependencies = [12198dependencies = [
12030 "async-trait",12199 "async-trait",
12031 "futures",12200 "futures",
1205012219
12051[[package]]12220[[package]]
12052name = "sc-transaction-pool-api"12221name = "sc-transaction-pool-api"
12053version = "4.0.0-dev"12222version = "25.0.0"
12054source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12223source = "registry+https://github.com/rust-lang/crates.io-index"
12224checksum = "1491607f296bb8cce09a5eb3a03320c60ad52bb8120127b26f69c32bcaccd8f2"
12055dependencies = [12225dependencies = [
12056 "async-trait",12226 "async-trait",
12057 "futures",12227 "futures",
1206612236
12067[[package]]12237[[package]]
12068name = "sc-utils"12238name = "sc-utils"
12069version = "4.0.0-dev"12239version = "11.0.0"
12070source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12240source = "registry+https://github.com/rust-lang/crates.io-index"
12241checksum = "81a4769c82dde62b9243dcc166be52e0c5d2d61cf2599923271118d9c8b997b1"
12071dependencies = [12242dependencies = [
12072 "async-channel",12243 "async-channel 1.9.0",
12073 "futures",12244 "futures",
12074 "futures-timer",12245 "futures-timer",
12075 "lazy_static",12246 "lazy_static",
1208112252
12082[[package]]12253[[package]]
12083name = "scale-info"12254name = "scale-info"
12084version = "2.9.0"12255version = "2.10.0"
12085source = "registry+https://github.com/rust-lang/crates.io-index"12256source = "registry+https://github.com/rust-lang/crates.io-index"
12086checksum = "35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782"12257checksum = "7f7d66a1128282b7ef025a8ead62a4a9fcf017382ec53b8ffbf4d7bf77bd3c60"
12087dependencies = [12258dependencies = [
12088 "bitvec",12259 "bitvec",
12089 "cfg-if",12260 "cfg-if",
1209512266
12096[[package]]12267[[package]]
12097name = "scale-info-derive"12268name = "scale-info-derive"
12098version = "2.9.0"12269version = "2.10.0"
12099source = "registry+https://github.com/rust-lang/crates.io-index"12270source = "registry+https://github.com/rust-lang/crates.io-index"
12100checksum = "912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29"12271checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19"
12101dependencies = [12272dependencies = [
12102 "proc-macro-crate",12273 "proc-macro-crate 1.3.1",
12103 "proc-macro2",12274 "proc-macro2",
12104 "quote",12275 "quote",
12105 "syn 1.0.109",12276 "syn 1.0.109",
12120source = "registry+https://github.com/rust-lang/crates.io-index"12291source = "registry+https://github.com/rust-lang/crates.io-index"
12121checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d"12292checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d"
12122dependencies = [12293dependencies = [
12123 "ahash 0.8.3",12294 "ahash 0.8.6",
12124 "cfg-if",12295 "cfg-if",
12125 "hashbrown 0.13.2",12296 "hashbrown 0.13.2",
12126]12297]
12139 "rand 0.7.3",12310 "rand 0.7.3",
12140 "rand_core 0.5.1",12311 "rand_core 0.5.1",
12141 "sha2 0.8.2",12312 "sha2 0.8.2",
12142 "subtle",12313 "subtle 2.4.1",
12143 "zeroize",12314 "zeroize",
12144]12315]
1214512316
12178checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"12349checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
12179dependencies = [12350dependencies = [
12180 "ring 0.16.20",12351 "ring 0.16.20",
12181 "untrusted",12352 "untrusted 0.7.1",
12182]12353]
1218312354
12184[[package]]12355[[package]]
12185name = "sct"12356name = "sct"
12186version = "0.7.0"12357version = "0.7.1"
12187source = "registry+https://github.com/rust-lang/crates.io-index"12358source = "registry+https://github.com/rust-lang/crates.io-index"
12188checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"12359checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
12189dependencies = [12360dependencies = [
12190 "ring 0.16.20",12361 "ring 0.17.5",
12191 "untrusted",12362 "untrusted 0.9.0",
12192]12363]
1219312364
12194[[package]]12365[[package]]
12213 "der 0.6.1",12384 "der 0.6.1",
12214 "generic-array 0.14.7",12385 "generic-array 0.14.7",
12215 "pkcs8 0.9.0",12386 "pkcs8 0.9.0",
12216 "subtle",12387 "subtle 2.4.1",
12217 "zeroize",12388 "zeroize",
12218]12389]
1221912390
12227 "der 0.7.8",12398 "der 0.7.8",
12228 "generic-array 0.14.7",12399 "generic-array 0.14.7",
12229 "pkcs8 0.10.2",12400 "pkcs8 0.10.2",
12230 "subtle",12401 "subtle 2.4.1",
12231 "zeroize",12402 "zeroize",
12232]12403]
1223312404
1229212463
12293[[package]]12464[[package]]
12294name = "semver"12465name = "semver"
12295version = "1.0.19"12466version = "1.0.20"
12296source = "registry+https://github.com/rust-lang/crates.io-index"12467source = "registry+https://github.com/rust-lang/crates.io-index"
12297checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"12468checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
12298dependencies = [12469dependencies = [
12299 "serde",12470 "serde",
12300]12471]
1230712478
12308[[package]]12479[[package]]
12309name = "serde"12480name = "serde"
12310version = "1.0.188"12481version = "1.0.193"
12311source = "registry+https://github.com/rust-lang/crates.io-index"12482source = "registry+https://github.com/rust-lang/crates.io-index"
12312checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"12483checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
12313dependencies = [12484dependencies = [
12314 "serde_derive",12485 "serde_derive",
12315]12486]
1231612487
12317[[package]]12488[[package]]
12318name = "serde_derive"12489name = "serde_derive"
12319version = "1.0.188"12490version = "1.0.193"
12320source = "registry+https://github.com/rust-lang/crates.io-index"12491source = "registry+https://github.com/rust-lang/crates.io-index"
12321checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"12492checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
12322dependencies = [12493dependencies = [
12323 "proc-macro2",12494 "proc-macro2",
12324 "quote",12495 "quote",
12325 "syn 2.0.37",12496 "syn 2.0.39",
12326]12497]
1232712498
12328[[package]]12499[[package]]
12329name = "serde_json"12500name = "serde_json"
12330version = "1.0.107"12501version = "1.0.108"
12331source = "registry+https://github.com/rust-lang/crates.io-index"12502source = "registry+https://github.com/rust-lang/crates.io-index"
12332checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"12503checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
12333dependencies = [12504dependencies = [
12334 "itoa",12505 "itoa",
12335 "ryu",12506 "ryu",
1233812509
12339[[package]]12510[[package]]
12340name = "serde_spanned"12511name = "serde_spanned"
12341version = "0.6.3"12512version = "0.6.4"
12342source = "registry+https://github.com/rust-lang/crates.io-index"12513source = "registry+https://github.com/rust-lang/crates.io-index"
12343checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"12514checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
12344dependencies = [12515dependencies = [
12345 "serde",12516 "serde",
12346]12517]
1243612607
12437[[package]]12608[[package]]
12438name = "sharded-slab"12609name = "sharded-slab"
12439version = "0.1.6"12610version = "0.1.7"
12440source = "registry+https://github.com/rust-lang/crates.io-index"12611source = "registry+https://github.com/rust-lang/crates.io-index"
12441checksum = "c1b21f559e07218024e7e9f90f96f601825397de0e25420135f7f952453fed0b"12612checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
12442dependencies = [12613dependencies = [
12443 "lazy_static",12614 "lazy_static",
12444]12615]
12450checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"12621checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
1245112622
12452[[package]]12623[[package]]
12453name = "signal-hook"
12454version = "0.3.17"
12455source = "registry+https://github.com/rust-lang/crates.io-index"
12456checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
12457dependencies = [
12458 "libc",
12459 "signal-hook-registry",
12460]
12461
12462[[package]]
12463name = "signal-hook-registry"12624name = "signal-hook-registry"
12464version = "1.4.1"12625version = "1.4.1"
12465source = "registry+https://github.com/rust-lang/crates.io-index"12626source = "registry+https://github.com/rust-lang/crates.io-index"
1248012641
12481[[package]]12642[[package]]
12482name = "signature"12643name = "signature"
12483version = "2.1.0"12644version = "2.2.0"
12484source = "registry+https://github.com/rust-lang/crates.io-index"12645source = "registry+https://github.com/rust-lang/crates.io-index"
12485checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"12646checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
12486dependencies = [12647dependencies = [
12487 "digest 0.10.7",12648 "digest 0.10.7",
12488 "rand_core 0.6.4",12649 "rand_core 0.6.4",
1252412685
12525[[package]]12686[[package]]
12526name = "slot-range-helper"12687name = "slot-range-helper"
12527version = "1.0.0"12688version = "4.0.0"
12528source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12689source = "registry+https://github.com/rust-lang/crates.io-index"
12690checksum = "1e902c6b7e8f86718aee7989d6c8ea851d9772cb54a3389f2d729d8df41167ec"
12529dependencies = [12691dependencies = [
12530 "enumn",12692 "enumn",
12531 "parity-scale-codec",12693 "parity-scale-codec",
1254512707
12546[[package]]12708[[package]]
12547name = "smallvec"12709name = "smallvec"
12548version = "1.11.1"12710version = "1.11.2"
12549source = "registry+https://github.com/rust-lang/crates.io-index"12711source = "registry+https://github.com/rust-lang/crates.io-index"
12550checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"12712checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
1255112713
12552[[package]]12714[[package]]
12553name = "smol"12715name = "smol"
12554version = "1.3.0"12716version = "1.3.0"
12555source = "registry+https://github.com/rust-lang/crates.io-index"12717source = "registry+https://github.com/rust-lang/crates.io-index"
12556checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"12718checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"
12557dependencies = [12719dependencies = [
12558 "async-channel",12720 "async-channel 1.9.0",
12559 "async-executor",12721 "async-executor",
12560 "async-fs",12722 "async-fs",
12561 "async-io",12723 "async-io 1.13.0",
12562 "async-lock",12724 "async-lock 2.8.0",
12563 "async-net",12725 "async-net",
12564 "async-process",12726 "async-process",
12565 "blocking",12727 "blocking",
12566 "futures-lite",12728 "futures-lite 1.13.0",
12567]12729]
1256812730
12569[[package]]12731[[package]]
12573checksum = "c0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5"12735checksum = "c0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5"
12574dependencies = [12736dependencies = [
12575 "arrayvec 0.7.4",12737 "arrayvec 0.7.4",
12576 "async-lock",12738 "async-lock 2.8.0",
12577 "atomic-take",12739 "atomic-take",
12578 "base64 0.21.4",12740 "base64 0.21.5",
12579 "bip39",12741 "bip39",
12580 "blake2-rfc",12742 "blake2-rfc",
12581 "bs58 0.5.0",12743 "bs58 0.5.0",
12582 "chacha20 0.9.1",12744 "chacha20",
12583 "crossbeam-queue",12745 "crossbeam-queue",
12584 "derive_more",12746 "derive_more",
12585 "ed25519-zebra 4.0.3",12747 "ed25519-zebra 4.0.3",
12586 "either",12748 "either",
12587 "event-listener",12749 "event-listener 2.5.3",
12588 "fnv",12750 "fnv",
12589 "futures-lite",12751 "futures-lite 1.13.0",
12590 "futures-util",12752 "futures-util",
12591 "hashbrown 0.14.1",12753 "hashbrown 0.14.2",
12592 "hex",12754 "hex",
12593 "hmac 0.12.1",12755 "hmac 0.12.1",
12594 "itertools 0.11.0",12756 "itertools 0.11.0",
12601 "num-traits",12763 "num-traits",
12602 "pbkdf2 0.12.2",12764 "pbkdf2 0.12.2",
12603 "pin-project",12765 "pin-project",
12604 "poly1305 0.8.0",12766 "poly1305",
12605 "rand 0.8.5",12767 "rand 0.8.5",
12606 "rand_chacha 0.3.1",12768 "rand_chacha 0.3.1",
12607 "ruzstd",12769 "ruzstd",
12626source = "registry+https://github.com/rust-lang/crates.io-index"12788source = "registry+https://github.com/rust-lang/crates.io-index"
12627checksum = "256b5bad1d6b49045e95fe87492ce73d5af81545d8b4d8318a872d2007024c33"12789checksum = "256b5bad1d6b49045e95fe87492ce73d5af81545d8b4d8318a872d2007024c33"
12628dependencies = [12790dependencies = [
12629 "async-channel",12791 "async-channel 1.9.0",
12630 "async-lock",12792 "async-lock 2.8.0",
12631 "base64 0.21.4",12793 "base64 0.21.5",
12632 "blake2-rfc",12794 "blake2-rfc",
12633 "derive_more",12795 "derive_more",
12634 "either",12796 "either",
12635 "event-listener",12797 "event-listener 2.5.3",
12636 "fnv",12798 "fnv",
12637 "futures-channel",12799 "futures-channel",
12638 "futures-lite",12800 "futures-lite 1.13.0",
12639 "futures-util",12801 "futures-util",
12640 "hashbrown 0.14.1",12802 "hashbrown 0.14.2",
12641 "hex",12803 "hex",
12642 "itertools 0.11.0",12804 "itertools 0.11.0",
12643 "log",12805 "log",
1266412826
12665[[package]]12827[[package]]
12666name = "snow"12828name = "snow"
12667version = "0.9.3"12829version = "0.9.4"
12668source = "registry+https://github.com/rust-lang/crates.io-index"12830source = "registry+https://github.com/rust-lang/crates.io-index"
12669checksum = "0c9d1425eb528a21de2755c75af4c9b5d57f50a0d4c3b7f1828a4cd03f8ba155"12831checksum = "58021967fd0a5eeeb23b08df6cc244a4d4a5b4aec1d27c9e02fad1a58b4cd74e"
12670dependencies = [12832dependencies = [
12671 "aes-gcm 0.9.4",12833 "aes-gcm 0.10.3",
12672 "blake2",12834 "blake2 0.10.6",
12673 "chacha20poly1305",12835 "chacha20poly1305",
12674 "curve25519-dalek 4.1.1",12836 "curve25519-dalek 4.1.1",
12675 "rand_core 0.6.4",12837 "rand_core 0.6.4",
12676 "ring 0.16.20",12838 "ring 0.17.5",
12677 "rustc_version",12839 "rustc_version",
12678 "sha2 0.10.8",12840 "sha2 0.10.8",
12679 "subtle",12841 "subtle 2.4.1",
12680]12842]
1268112843
12682[[package]]12844[[package]]
12683name = "socket2"12845name = "socket2"
12684version = "0.4.9"12846version = "0.4.10"
12685source = "registry+https://github.com/rust-lang/crates.io-index"12847source = "registry+https://github.com/rust-lang/crates.io-index"
12686checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"12848checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
12687dependencies = [12849dependencies = [
12688 "libc",12850 "libc",
12689 "winapi",12851 "winapi",
12690]12852]
1269112853
12692[[package]]12854[[package]]
12693name = "socket2"12855name = "socket2"
12694version = "0.5.4"12856version = "0.5.5"
12695source = "registry+https://github.com/rust-lang/crates.io-index"12857source = "registry+https://github.com/rust-lang/crates.io-index"
12696checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"12858checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
12697dependencies = [12859dependencies = [
12698 "libc",12860 "libc",
12699 "windows-sys 0.48.0",12861 "windows-sys 0.48.0",
1271812880
12719[[package]]12881[[package]]
12720name = "sp-api"12882name = "sp-api"
12721version = "4.0.0-dev"12883version = "23.0.0"
12722source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12884source = "registry+https://github.com/rust-lang/crates.io-index"
12885checksum = "f582f92ce47c86e4ffffe81fdd5120fea7c850dc0800653a7fa203bcc1532335"
12723dependencies = [12886dependencies = [
12724 "hash-db 0.16.0",12887 "hash-db 0.16.0",
12725 "log",12888 "log",
1273912902
12740[[package]]12903[[package]]
12741name = "sp-api-proc-macro"12904name = "sp-api-proc-macro"
12742version = "4.0.0-dev"12905version = "12.0.0"
12743source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12906source = "registry+https://github.com/rust-lang/crates.io-index"
12907checksum = "a896941b2d27365a6f937ebce11e36d55132dc32104f6a48b4cd765b55efd252"
12744dependencies = [12908dependencies = [
12745 "Inflector",12909 "Inflector",
12746 "blake2",12910 "blake2 0.10.6",
12747 "expander 2.0.0",12911 "expander 2.0.0",
12748 "proc-macro-crate",12912 "proc-macro-crate 1.3.1",
12749 "proc-macro2",12913 "proc-macro2",
12750 "quote",12914 "quote",
12751 "syn 2.0.37",12915 "syn 2.0.39",
12752]12916]
1275312917
12754[[package]]12918[[package]]
12755name = "sp-application-crypto"12919name = "sp-application-crypto"
12756version = "23.0.0"12920version = "27.0.0"
12757source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12921source = "registry+https://github.com/rust-lang/crates.io-index"
12922checksum = "a93da025616ab59639f8e378df579c5aaa2c8b9999f328a0239156a57c991b53"
12758dependencies = [12923dependencies = [
12759 "parity-scale-codec",12924 "parity-scale-codec",
12760 "scale-info",12925 "scale-info",
1276612931
12767[[package]]12932[[package]]
12768name = "sp-arithmetic"12933name = "sp-arithmetic"
12769version = "16.0.0"12934version = "20.0.0"
12770source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12935source = "registry+https://github.com/rust-lang/crates.io-index"
12936checksum = "f80b5c16afb61dde1037a469d570adcc686440036429e50abe2301ba9d61aad5"
12771dependencies = [12937dependencies = [
12772 "integer-sqrt",12938 "integer-sqrt",
12773 "num-traits",12939 "num-traits",
1278012946
12781[[package]]12947[[package]]
12782name = "sp-authority-discovery"12948name = "sp-authority-discovery"
12783version = "4.0.0-dev"12949version = "23.0.0"
12784source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12950source = "registry+https://github.com/rust-lang/crates.io-index"
12951checksum = "e204d85bad6f02a5ae8fbba83c365e20459e979fd69db5575ba4b3ea1025ab3c"
12785dependencies = [12952dependencies = [
12786 "parity-scale-codec",12953 "parity-scale-codec",
12787 "scale-info",12954 "scale-info",
1279312960
12794[[package]]12961[[package]]
12795name = "sp-block-builder"12962name = "sp-block-builder"
12796version = "4.0.0-dev"12963version = "23.0.0"
12797source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12964source = "registry+https://github.com/rust-lang/crates.io-index"
12965checksum = "6cd16df3d1cdad862d3e764f10f7675876b011e032907423fdfa377ae2ec8575"
12798dependencies = [12966dependencies = [
12799 "sp-api",12967 "sp-api",
12800 "sp-inherents",12968 "sp-inherents",
1280412972
12805[[package]]12973[[package]]
12806name = "sp-blockchain"12974name = "sp-blockchain"
12807version = "4.0.0-dev"12975version = "25.0.0"
12808source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12976source = "registry+https://github.com/rust-lang/crates.io-index"
12977checksum = "4932b97cde61874f395bab9b02443e3bd2046943abb280b63f83da9d0b623ea7"
12809dependencies = [12978dependencies = [
12810 "futures",12979 "futures",
12811 "log",12980 "log",
1282212991
12823[[package]]12992[[package]]
12824name = "sp-consensus"12993name = "sp-consensus"
12825version = "0.10.0-dev"12994version = "0.29.0"
12826source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"12995source = "registry+https://github.com/rust-lang/crates.io-index"
12996checksum = "2c5d7170fb7cfb18024ef7eeb40d272d22b9c3587d85cde2d091e8463b397f06"
12827dependencies = [12997dependencies = [
12828 "async-trait",12998 "async-trait",
12829 "futures",12999 "futures",
1283713007
12838[[package]]13008[[package]]
12839name = "sp-consensus-aura"13009name = "sp-consensus-aura"
12840version = "0.10.0-dev"13010version = "0.29.0"
12841source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13011source = "registry+https://github.com/rust-lang/crates.io-index"
13012checksum = "643a7c486a645f398d219d1fbcc8a416cad5018164a212fefde5c2ef00a182e4"
12842dependencies = [13013dependencies = [
12843 "async-trait",13014 "async-trait",
12844 "parity-scale-codec",13015 "parity-scale-codec",
1285413025
12855[[package]]13026[[package]]
12856name = "sp-consensus-babe"13027name = "sp-consensus-babe"
12857version = "0.10.0-dev"13028version = "0.29.0"
12858source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13029source = "registry+https://github.com/rust-lang/crates.io-index"
13030checksum = "268f9b2e36d4e136c09ad87876cdcfd7ff734cb5917f333fefebff248f95a24f"
12859dependencies = [13031dependencies = [
12860 "async-trait",13032 "async-trait",
12861 "parity-scale-codec",13033 "parity-scale-codec",
1287313045
12874[[package]]13046[[package]]
12875name = "sp-consensus-beefy"13047name = "sp-consensus-beefy"
12876version = "4.0.0-dev"13048version = "10.0.0"
12877source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13049source = "registry+https://github.com/rust-lang/crates.io-index"
13050checksum = "90e18fe984ea745727e645c43d6a955bc471b3bcd36aa8d260c3bd0deeada0c5"
12878dependencies = [13051dependencies = [
12879 "lazy_static",13052 "lazy_static",
12880 "parity-scale-codec",13053 "parity-scale-codec",
12887 "sp-mmr-primitives",13060 "sp-mmr-primitives",
12888 "sp-runtime",13061 "sp-runtime",
12889 "sp-std",13062 "sp-std",
12890 "strum",13063 "strum 0.24.1",
12891]13064]
1289213065
12893[[package]]13066[[package]]
12894name = "sp-consensus-grandpa"13067name = "sp-consensus-grandpa"
12895version = "4.0.0-dev"13068version = "10.0.0"
12896source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13069source = "registry+https://github.com/rust-lang/crates.io-index"
13070checksum = "28bbee685900110419913f281ce0f29457fbc17418f00d15f0212c8043aba167"
12897dependencies = [13071dependencies = [
12898 "finality-grandpa",13072 "finality-grandpa",
12899 "log",13073 "log",
1291013084
12911[[package]]13085[[package]]
12912name = "sp-consensus-slots"13086name = "sp-consensus-slots"
12913version = "0.10.0-dev"13087version = "0.29.0"
12914source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13088source = "registry+https://github.com/rust-lang/crates.io-index"
13089checksum = "895b0c176d4eead833ddee5251d3cccbaeb0191ca3f33f84b11d347bebc6e21f"
12915dependencies = [13090dependencies = [
12916 "parity-scale-codec",13091 "parity-scale-codec",
12917 "scale-info",13092 "scale-info",
1292213097
12923[[package]]13098[[package]]
12924name = "sp-core"13099name = "sp-core"
12925version = "21.0.0"13100version = "25.0.0"
12926source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13101source = "registry+https://github.com/rust-lang/crates.io-index"
13102checksum = "f9ebb090ead698a6df04347c86a31ba91a387edb8a58534ec70c4f977d1e1e87"
12927dependencies = [13103dependencies = [
12928 "array-bytes",13104 "array-bytes 6.2.0",
12929 "arrayvec 0.7.4",
12930 "bandersnatch_vrfs",
12931 "bitflags 1.3.2",13105 "bitflags 1.3.2",
12932 "blake2",13106 "blake2 0.10.6",
12933 "bounded-collections",13107 "bounded-collections",
12934 "bs58 0.5.0",13108 "bs58 0.5.0",
12935 "dyn-clonable",13109 "dyn-clonable",
12964 "thiserror",13138 "thiserror",
12965 "tiny-bip39",13139 "tiny-bip39",
12966 "tracing",13140 "tracing",
13141 "w3f-bls",
12967 "zeroize",13142 "zeroize",
12968]13143]
1296913144
12970[[package]]13145[[package]]
12971name = "sp-core-hashing"13146name = "sp-core-hashing"
12972version = "9.0.0"13147version = "13.0.0"
12973source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13148source = "registry+https://github.com/rust-lang/crates.io-index"
13149checksum = "cb8524f01591ee58b46cd83c9dbc0fcffd2fd730dabec4f59326cd58a00f17e2"
12974dependencies = [13150dependencies = [
12975 "blake2b_simd",13151 "blake2b_simd",
12976 "byteorder",13152 "byteorder",
1298213158
12983[[package]]13159[[package]]
12984name = "sp-core-hashing-proc-macro"13160name = "sp-core-hashing-proc-macro"
12985version = "9.0.0"13161version = "13.0.0"
12986source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13162source = "registry+https://github.com/rust-lang/crates.io-index"
13163checksum = "42ce3e6931303769197da81facefa86159fa1085dcd96ecb7e7407b5b93582a0"
12987dependencies = [13164dependencies = [
12988 "quote",13165 "quote",
12989 "sp-core-hashing",13166 "sp-core-hashing",
12990 "syn 2.0.37",13167 "syn 2.0.39",
12991]13168]
1299213169
12993[[package]]13170[[package]]
12994name = "sp-database"13171name = "sp-database"
12995version = "4.0.0-dev"13172version = "9.0.0"
12996source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13173source = "registry+https://github.com/rust-lang/crates.io-index"
13174checksum = "9c6e8c710d6a71512af6f42d9dba9c3d1f6ad793846480babf459bbde3d60a94"
12997dependencies = [13175dependencies = [
12998 "kvdb",13176 "kvdb",
12999 "parking_lot 0.12.1",13177 "parking_lot 0.12.1",
13000]13178]
1300113179
13002[[package]]13180[[package]]
13003name = "sp-debug-derive"13181name = "sp-debug-derive"
13004version = "8.0.0"13182version = "12.0.0"
13005source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13183source = "registry+https://github.com/rust-lang/crates.io-index"
13184checksum = "50535e1a5708d3ba5c1195b59ebefac61cc8679c2c24716b87a86e8b7ed2e4a1"
13006dependencies = [13185dependencies = [
13007 "proc-macro2",13186 "proc-macro2",
13008 "quote",13187 "quote",
13009 "syn 2.0.37",13188 "syn 2.0.39",
13010]13189]
1301113190
13012[[package]]13191[[package]]
13013name = "sp-externalities"13192name = "sp-externalities"
13014version = "0.19.0"13193version = "0.23.0"
13015source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13194source = "registry+https://github.com/rust-lang/crates.io-index"
13195checksum = "884d05160bc89d0943d1c9fb8006c3d44b80f37f8af607aeff8d4d9cc82e279a"
13016dependencies = [13196dependencies = [
13017 "environmental",13197 "environmental",
13018 "parity-scale-codec",13198 "parity-scale-codec",
1302213202
13023[[package]]13203[[package]]
13024name = "sp-genesis-builder"13204name = "sp-genesis-builder"
13025version = "0.1.0"13205version = "0.4.0"
13026source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13206source = "registry+https://github.com/rust-lang/crates.io-index"
13207checksum = "a0cb71d40ad47e40bdcce5ae5531c7d7ba579cd495a0e0413642fb063fa66f84"
13027dependencies = [13208dependencies = [
13028 "serde_json",13209 "serde_json",
13029 "sp-api",13210 "sp-api",
1303313214
13034[[package]]13215[[package]]
13035name = "sp-inherents"13216name = "sp-inherents"
13036version = "4.0.0-dev"13217version = "23.0.0"
13037source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13218source = "registry+https://github.com/rust-lang/crates.io-index"
13219checksum = "604229aa145be0cff853b47ffed8bc2c62eb08ec6974d6307b9a559c378e6dc5"
13038dependencies = [13220dependencies = [
13039 "async-trait",13221 "async-trait",
13040 "impl-trait-for-tuples",13222 "impl-trait-for-tuples",
1304713229
13048[[package]]13230[[package]]
13049name = "sp-io"13231name = "sp-io"
13050version = "23.0.0"13232version = "27.0.0"
13051source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13233source = "registry+https://github.com/rust-lang/crates.io-index"
13234checksum = "0ced350da15e8ba3a106206840acc42a6d3eb0d7e8bf7aa43ab00eac0bdf956f"
13052dependencies = [13235dependencies = [
13053 "bytes",13236 "bytes",
13054 "ed25519-dalek",13237 "ed25519-dalek",
1307113254
13072[[package]]13255[[package]]
13073name = "sp-keyring"13256name = "sp-keyring"
13074version = "24.0.0"13257version = "28.0.0"
13075source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13258source = "registry+https://github.com/rust-lang/crates.io-index"
13259checksum = "655ec0b35cb9cb9029fb323aa676b07d58deb872cecc7566e50278409a00ee95"
13076dependencies = [13260dependencies = [
13077 "lazy_static",13261 "lazy_static",
13078 "sp-core",13262 "sp-core",
13079 "sp-runtime",13263 "sp-runtime",
13080 "strum",13264 "strum 0.24.1",
13081]13265]
1308213266
13083[[package]]13267[[package]]
13084name = "sp-keystore"13268name = "sp-keystore"
13085version = "0.27.0"13269version = "0.31.0"
13086source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13270source = "registry+https://github.com/rust-lang/crates.io-index"
13271checksum = "8b8ec5ebbba70bee83d79c3fe5e49f12df0a4bb6029858ddf9a15eea7539a592"
13087dependencies = [13272dependencies = [
13088 "parity-scale-codec",13273 "parity-scale-codec",
13089 "parking_lot 0.12.1",13274 "parking_lot 0.12.1",
1309413279
13095[[package]]13280[[package]]
13096name = "sp-maybe-compressed-blob"13281name = "sp-maybe-compressed-blob"
13097version = "4.1.0-dev"13282version = "9.0.0"
13098source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13283source = "registry+https://github.com/rust-lang/crates.io-index"
13284checksum = "8846768f036429227e49f6ab523fbee4bc6edfee278a361bf27999590fe020d4"
13099dependencies = [13285dependencies = [
13100 "thiserror",13286 "thiserror",
13101 "zstd 0.12.4",13287 "zstd 0.12.4",
13102]13288]
1310313289
13104[[package]]13290[[package]]
13105name = "sp-metadata-ir"13291name = "sp-metadata-ir"
13106version = "0.1.0"13292version = "0.4.0"
13107source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13293source = "registry+https://github.com/rust-lang/crates.io-index"
13294checksum = "7ca9ff0e522a74725ac92f009d38deeb12e880f5296afbd78a6c6b970b773278"
13108dependencies = [13295dependencies = [
13109 "frame-metadata",13296 "frame-metadata",
13110 "parity-scale-codec",13297 "parity-scale-codec",
13113]13300]
1311413301
13115[[package]]13302[[package]]
13303name = "sp-mixnet"
13304version = "0.1.0"
13305source = "registry+https://github.com/rust-lang/crates.io-index"
13306checksum = "bdf61f28ca97aab6c21a3c6e0ed496e60d505e5de1f43fd4ba748c9afaa4fc85"
13307dependencies = [
13308 "parity-scale-codec",
13309 "scale-info",
13310 "sp-api",
13311 "sp-application-crypto",
13312 "sp-std",
13313]
13314
13315[[package]]
13116name = "sp-mmr-primitives"13316name = "sp-mmr-primitives"
13117version = "4.0.0-dev"13317version = "23.0.0"
13118source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13318source = "registry+https://github.com/rust-lang/crates.io-index"
13319checksum = "0c3b33c20a4b1dd5a0069ced6997078a2af5d625f2c53d1b69bef9e131f42d77"
13119dependencies = [13320dependencies = [
13120 "ckb-merkle-mountain-range",13321 "ckb-merkle-mountain-range",
13121 "log",13322 "log",
1313213333
13133[[package]]13334[[package]]
13134name = "sp-npos-elections"13335name = "sp-npos-elections"
13135version = "4.0.0-dev"13336version = "23.0.0"
13136source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13337source = "registry+https://github.com/rust-lang/crates.io-index"
13338checksum = "9ee3536d7fd990c30864ca545d7bdbee02dc66a92ac2a7a66ab4e21521992a7b"
13137dependencies = [13339dependencies = [
13138 "parity-scale-codec",13340 "parity-scale-codec",
13139 "scale-info",13341 "scale-info",
1314613348
13147[[package]]13349[[package]]
13148name = "sp-offchain"13350name = "sp-offchain"
13149version = "4.0.0-dev"13351version = "23.0.0"
13150source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13352source = "registry+https://github.com/rust-lang/crates.io-index"
13353checksum = "9310227f043ed99877b0449a683025a7461431a00995dcd6ef423a273d0fd85d"
13151dependencies = [13354dependencies = [
13152 "sp-api",13355 "sp-api",
13153 "sp-core",13356 "sp-core",
1315613359
13157[[package]]13360[[package]]
13158name = "sp-panic-handler"13361name = "sp-panic-handler"
13159version = "8.0.0"13362version = "12.0.0"
13160source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13363source = "registry+https://github.com/rust-lang/crates.io-index"
13364checksum = "b00e40857ed3e0187f145b037c733545c5633859f1bd1d1b09deb52805fa696a"
13161dependencies = [13365dependencies = [
13162 "backtrace",13366 "backtrace",
13163 "lazy_static",13367 "lazy_static",
1316613370
13167[[package]]13371[[package]]
13168name = "sp-rpc"13372name = "sp-rpc"
13169version = "6.0.0"13373version = "23.0.0"
13170source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13374source = "registry+https://github.com/rust-lang/crates.io-index"
13375checksum = "51867fea921f54bbaa2bf505f373559b5f3b80e8d7f38ecb9677f0d3795a3e6a"
13171dependencies = [13376dependencies = [
13172 "rustc-hash",13377 "rustc-hash",
13173 "serde",13378 "serde",
1317613381
13177[[package]]13382[[package]]
13178name = "sp-runtime"13383name = "sp-runtime"
13179version = "24.0.0"13384version = "28.0.0"
13180source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13385source = "registry+https://github.com/rust-lang/crates.io-index"
13386checksum = "6d9c40ff7303e62219b55635e5245d963358cb77d6916250991ebcb82c0be2c6"
13181dependencies = [13387dependencies = [
13182 "either",13388 "either",
13183 "hash256-std-hasher",13389 "hash256-std-hasher",
1319813404
13199[[package]]13405[[package]]
13200name = "sp-runtime-interface"13406name = "sp-runtime-interface"
13201version = "17.0.0"13407version = "21.0.0"
13202source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13408source = "registry+https://github.com/rust-lang/crates.io-index"
13409checksum = "4f365332922a8cfa98ab00c6d08b1b0f24e159e730dd554e720d950ff3371b1f"
13203dependencies = [13410dependencies = [
13204 "bytes",13411 "bytes",
13205 "impl-trait-for-tuples",13412 "impl-trait-for-tuples",
1321613423
13217[[package]]13424[[package]]
13218name = "sp-runtime-interface-proc-macro"13425name = "sp-runtime-interface-proc-macro"
13219version = "11.0.0"13426version = "15.0.0"
13220source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13427source = "registry+https://github.com/rust-lang/crates.io-index"
13428checksum = "9b2afcbd1bd18d323371111b66b7ac2870bdc1c86c3d7b0dae67b112ca52b4d8"
13221dependencies = [13429dependencies = [
13222 "Inflector",13430 "Inflector",
13223 "proc-macro-crate",13431 "proc-macro-crate 1.3.1",
13224 "proc-macro2",13432 "proc-macro2",
13225 "quote",13433 "quote",
13226 "syn 2.0.37",13434 "syn 2.0.39",
13227]13435]
1322813436
13229[[package]]13437[[package]]
13230name = "sp-session"13438name = "sp-session"
13231version = "4.0.0-dev"13439version = "24.0.0"
13232source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13440source = "registry+https://github.com/rust-lang/crates.io-index"
13441checksum = "248dd8f49aa96b56bf0a7d513691ddb4194f9359fdb93e94397eabdef1036085"
13233dependencies = [13442dependencies = [
13234 "parity-scale-codec",13443 "parity-scale-codec",
13235 "scale-info",13444 "scale-info",
1324313452
13244[[package]]13453[[package]]
13245name = "sp-staking"13454name = "sp-staking"
13246version = "4.0.0-dev"13455version = "23.0.0"
13247source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13456source = "registry+https://github.com/rust-lang/crates.io-index"
13457checksum = "ee0feed0137234598bd1f76d0b468c585ea16619ea9ed1acbba82dd24ac79788"
13248dependencies = [13458dependencies = [
13249 "impl-trait-for-tuples",13459 "impl-trait-for-tuples",
13250 "parity-scale-codec",13460 "parity-scale-codec",
1325713467
13258[[package]]13468[[package]]
13259name = "sp-state-machine"13469name = "sp-state-machine"
13260version = "0.28.0"13470version = "0.32.0"
13261source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13471source = "registry+https://github.com/rust-lang/crates.io-index"
13472checksum = "96e087fa4430befd2047b61d912c9d6fa4eaed408c4b58b46c6e9acd7965f2d3"
13262dependencies = [13473dependencies = [
13263 "hash-db 0.16.0",13474 "hash-db 0.16.0",
13264 "log",13475 "log",
13273 "sp-trie",13484 "sp-trie",
13274 "thiserror",13485 "thiserror",
13275 "tracing",13486 "tracing",
13276 "trie-db",13487 "trie-db 0.28.0",
13277]13488]
1327813489
13279[[package]]13490[[package]]
13280name = "sp-statement-store"13491name = "sp-statement-store"
13281version = "4.0.0-dev"13492version = "7.0.0"
13282source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13493source = "registry+https://github.com/rust-lang/crates.io-index"
13494checksum = "4b8654bcd37602b1811414050d34d14f543873bd4e64e50d210a0116b660c600"
13283dependencies = [13495dependencies = [
13284 "aes-gcm 0.10.3",13496 "aes-gcm 0.10.3",
13285 "curve25519-dalek 4.1.1",13497 "curve25519-dalek 4.1.1",
1330213514
13303[[package]]13515[[package]]
13304name = "sp-std"13516name = "sp-std"
13305version = "8.0.0"13517version = "12.0.0"
13306source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13518source = "registry+https://github.com/rust-lang/crates.io-index"
13519checksum = "54c78c5a66682568cc7b153603c5d01a2cc8f5c221c7b1e921517a0eef18ae05"
1330713520
13308[[package]]13521[[package]]
13309name = "sp-storage"13522name = "sp-storage"
13310version = "13.0.0"13523version = "17.0.0"
13311source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13524source = "registry+https://github.com/rust-lang/crates.io-index"
13525checksum = "016f20812cc51bd479cc88d048c35d44cd3adde4accdb159d49d6050f2953595"
13312dependencies = [13526dependencies = [
13313 "impl-serde",13527 "impl-serde",
13314 "parity-scale-codec",13528 "parity-scale-codec",
1332013534
13321[[package]]13535[[package]]
13322name = "sp-timestamp"13536name = "sp-timestamp"
13323version = "4.0.0-dev"13537version = "23.0.0"
13324source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13538source = "registry+https://github.com/rust-lang/crates.io-index"
13539checksum = "004a7f453240db80b2967c0e1c6411836efc7daa7afae98fd16202caa51460e0"
13325dependencies = [13540dependencies = [
13326 "async-trait",13541 "async-trait",
13327 "parity-scale-codec",13542 "parity-scale-codec",
1333313548
13334[[package]]13549[[package]]
13335name = "sp-tracing"13550name = "sp-tracing"
13336version = "10.0.0"13551version = "14.0.0"
13337source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13552source = "registry+https://github.com/rust-lang/crates.io-index"
13553checksum = "0d727cb5265641ffbb7d4e42c18b63e29f6cfdbd240aae3bcf093c3d6eb29a19"
13338dependencies = [13554dependencies = [
13339 "parity-scale-codec",13555 "parity-scale-codec",
13340 "sp-std",13556 "sp-std",
1334513561
13346[[package]]13562[[package]]
13347name = "sp-transaction-pool"13563name = "sp-transaction-pool"
13348version = "4.0.0-dev"13564version = "23.0.0"
13349source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13565source = "registry+https://github.com/rust-lang/crates.io-index"
13566checksum = "c7cd2afe89c474339d15d06e73639171ebe4d280be6904d9349072103da21427"
13350dependencies = [13567dependencies = [
13351 "sp-api",13568 "sp-api",
13352 "sp-runtime",13569 "sp-runtime",
13353]13570]
1335413571
13355[[package]]13572[[package]]
13356name = "sp-transaction-storage-proof"13573name = "sp-transaction-storage-proof"
13357version = "4.0.0-dev"13574version = "23.0.0"
13358source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13575source = "registry+https://github.com/rust-lang/crates.io-index"
13576checksum = "39ae7c4954431b8479f7b2b6b82f0551cc360a1ee59b6a5276eef86a1099eaed"
13359dependencies = [13577dependencies = [
13360 "async-trait",13578 "async-trait",
13361 "parity-scale-codec",13579 "parity-scale-codec",
1336913587
13370[[package]]13588[[package]]
13371name = "sp-trie"13589name = "sp-trie"
13372version = "22.0.0"13590version = "26.0.0"
13373source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13591source = "registry+https://github.com/rust-lang/crates.io-index"
13592checksum = "1e359b358263cc322c3f678c272a3a519621d9853dcfa1374dfcbdb5f54c6f85"
13374dependencies = [13593dependencies = [
13375 "ahash 0.8.3",13594 "ahash 0.8.6",
13376 "hash-db 0.16.0",13595 "hash-db 0.16.0",
13377 "hashbrown 0.13.2",13596 "hashbrown 0.13.2",
13378 "lazy_static",13597 "lazy_static",
13379 "memory-db",13598 "memory-db",
13380 "nohash-hasher",13599 "nohash-hasher",
13381 "parity-scale-codec",13600 "parity-scale-codec",
13382 "parking_lot 0.12.1",13601 "parking_lot 0.12.1",
13602 "rand 0.8.5",
13383 "scale-info",13603 "scale-info",
13384 "schnellru",13604 "schnellru",
13385 "sp-core",13605 "sp-core",
13386 "sp-std",13606 "sp-std",
13387 "thiserror",13607 "thiserror",
13388 "tracing",13608 "tracing",
13389 "trie-db",13609 "trie-db 0.28.0",
13390 "trie-root",13610 "trie-root",
13391]13611]
1339213612
13393[[package]]13613[[package]]
13394name = "sp-version"13614name = "sp-version"
13395version = "22.0.0"13615version = "26.0.0"
13396source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13616source = "registry+https://github.com/rust-lang/crates.io-index"
13617checksum = "3e93da332eba3cb59a65f128da5edd5c70e1475692b45470104e7465b1278471"
13397dependencies = [13618dependencies = [
13398 "impl-serde",13619 "impl-serde",
13399 "parity-scale-codec",13620 "parity-scale-codec",
1340913630
13410[[package]]13631[[package]]
13411name = "sp-version-proc-macro"13632name = "sp-version-proc-macro"
13412version = "8.0.0"13633version = "12.0.0"
13413source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13634source = "registry+https://github.com/rust-lang/crates.io-index"
13635checksum = "49535d8c7184dab46d15639c68374a30cbb1534e392fa09a1ebb059a993ad436"
13414dependencies = [13636dependencies = [
13415 "parity-scale-codec",13637 "parity-scale-codec",
13416 "proc-macro2",13638 "proc-macro2",
13417 "quote",13639 "quote",
13418 "syn 2.0.37",13640 "syn 2.0.39",
13419]13641]
1342013642
13421[[package]]13643[[package]]
13422name = "sp-wasm-interface"13644name = "sp-wasm-interface"
13423version = "14.0.0"13645version = "18.0.0"
13424source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13646source = "registry+https://github.com/rust-lang/crates.io-index"
13647checksum = "d5d85813d46a22484cdf5e5afddbbe85442dd1b4d84d67a8c7792f92f9f93607"
13425dependencies = [13648dependencies = [
13426 "anyhow",13649 "anyhow",
13427 "impl-trait-for-tuples",13650 "impl-trait-for-tuples",
1343313656
13434[[package]]13657[[package]]
13435name = "sp-weights"13658name = "sp-weights"
13436version = "20.0.0"13659version = "24.0.0"
13437source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13660source = "registry+https://github.com/rust-lang/crates.io-index"
13661checksum = "751676c1263e7f3600af16bad26a7978a816bc532676fe05eafa23b862c05b9e"
13438dependencies = [13662dependencies = [
13439 "parity-scale-codec",13663 "parity-scale-codec",
13440 "scale-info",13664 "scale-info",
13454dependencies = [13678dependencies = [
13455 "proc-macro2",13679 "proc-macro2",
13456 "quote",13680 "quote",
13457 "syn 2.0.37",13681 "syn 2.0.39",
13458]13682]
1345913683
13460[[package]]13684[[package]]
13477dependencies = [13701dependencies = [
13478 "lazy_static",13702 "lazy_static",
13479 "maplit",13703 "maplit",
13480 "strum",13704 "strum 0.24.1",
13481]13705]
1348213706
13483[[package]]13707[[package]]
1350213726
13503[[package]]13727[[package]]
13504name = "ss58-registry"13728name = "ss58-registry"
13505version = "1.43.0"13729version = "1.44.0"
13506source = "registry+https://github.com/rust-lang/crates.io-index"13730source = "registry+https://github.com/rust-lang/crates.io-index"
13507checksum = "5e6915280e2d0db8911e5032a5c275571af6bdded2916abd691a659be25d3439"13731checksum = "35935738370302d5e33963665b77541e4b990a3e919ec904c837a56cfc891de1"
13508dependencies = [13732dependencies = [
13509 "Inflector",13733 "Inflector",
13510 "num-format",13734 "num-format",
13522checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"13746checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1352313747
13524[[package]]13748[[package]]
13525name = "staging-kusama-runtime"13749name = "staging-parachain-info"
13526version = "1.0.0"13750version = "0.4.0"
13527source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13751source = "registry+https://github.com/rust-lang/crates.io-index"
13752checksum = "3a1bcf863664ca5708d92894fc30d2c6606c7dbb7d7cfcf43b9ae69d5b83f4fb"
13528dependencies = [13753dependencies = [
13529 "binary-merkle-tree",13754 "cumulus-primitives-core",
13530 "bitvec",
13531 "frame-benchmarking",
13532 "frame-election-provider-support",
13533 "frame-executive",
13534 "frame-support",13755 "frame-support",
13535 "frame-system",13756 "frame-system",
13536 "frame-system-benchmarking",
13537 "frame-system-rpc-runtime-api",
13538 "frame-try-runtime",
13539 "hex-literal",
13540 "kusama-runtime-constants",
13541 "log",
13542 "pallet-authority-discovery",
13543 "pallet-authorship",
13544 "pallet-babe",
13545 "pallet-bags-list",
13546 "pallet-balances",
13547 "pallet-beefy",
13548 "pallet-beefy-mmr",
13549 "pallet-bounties",
13550 "pallet-child-bounties",
13551 "pallet-collective",
13552 "pallet-conviction-voting",
13553 "pallet-democracy",
13554 "pallet-election-provider-multi-phase",
13555 "pallet-election-provider-support-benchmarking",
13556 "pallet-elections-phragmen",
13557 "pallet-fast-unstake",
13558 "pallet-grandpa",
13559 "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0)",
13560 "pallet-im-online",
13561 "pallet-indices",
13562 "pallet-membership",
13563 "pallet-message-queue",
13564 "pallet-mmr",
13565 "pallet-multisig",
13566 "pallet-nis",
13567 "pallet-nomination-pools",
13568 "pallet-nomination-pools-benchmarking",
13569 "pallet-nomination-pools-runtime-api",
13570 "pallet-offences",
13571 "pallet-offences-benchmarking",
13572 "pallet-preimage",
13573 "pallet-proxy",
13574 "pallet-ranked-collective",
13575 "pallet-recovery",
13576 "pallet-referenda",
13577 "pallet-scheduler",
13578 "pallet-session",
13579 "pallet-session-benchmarking",
13580 "pallet-society",
13581 "pallet-staking",
13582 "pallet-staking-runtime-api",
13583 "pallet-state-trie-migration",
13584 "pallet-timestamp",
13585 "pallet-tips",
13586 "pallet-transaction-payment",
13587 "pallet-transaction-payment-rpc-runtime-api",
13588 "pallet-treasury",
13589 "pallet-utility",
13590 "pallet-vesting",
13591 "pallet-whitelist",
13592 "pallet-xcm",
13593 "pallet-xcm-benchmarks",
13594 "parity-scale-codec",13757 "parity-scale-codec",
13595 "polkadot-primitives",
13596 "polkadot-runtime-common",
13597 "polkadot-runtime-parachains",
13598 "rustc-hex",
13599 "scale-info",13758 "scale-info",
13600 "serde",
13601 "serde_derive",
13602 "smallvec",
13603 "sp-api",
13604 "sp-application-crypto",
13605 "sp-arithmetic",
13606 "sp-authority-discovery",
13607 "sp-block-builder",
13608 "sp-consensus-babe",
13609 "sp-consensus-beefy",
13610 "sp-core",
13611 "sp-inherents",
13612 "sp-io",
13613 "sp-mmr-primitives",
13614 "sp-npos-elections",
13615 "sp-offchain",
13616 "sp-runtime",13759 "sp-runtime",
13617 "sp-session",
13618 "sp-staking",
13619 "sp-std",13760 "sp-std",
13620 "sp-storage",
13621 "sp-transaction-pool",
13622 "sp-version",
13623 "staging-xcm",
13624 "staging-xcm-builder",
13625 "staging-xcm-executor",
13626 "static_assertions",
13627 "substrate-wasm-builder",
13628]13761]
1362913762
13630[[package]]13763[[package]]
13631name = "staging-xcm"13764name = "staging-xcm"
13632version = "1.0.0"13765version = "4.0.0"
13633source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13766source = "registry+https://github.com/rust-lang/crates.io-index"
13767checksum = "7abd0c2e401a1e264379131c27676bc65c9631aaa508044bc04d8ce60a7d8524"
13634dependencies = [13768dependencies = [
13635 "bounded-collections",13769 "bounded-collections",
13636 "derivative",13770 "derivative",
1364613780
13647[[package]]13781[[package]]
13648name = "staging-xcm-builder"13782name = "staging-xcm-builder"
13649version = "1.0.0"13783version = "4.0.0"
13650source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13784source = "registry+https://github.com/rust-lang/crates.io-index"
13785checksum = "aa3b14246daaf0301dd35d698bac570d82ba0c6c6c1d3e149b93bcf377b2fc6b"
13651dependencies = [13786dependencies = [
13652 "frame-support",13787 "frame-support",
13653 "frame-system",13788 "frame-system",
1366813803
13669[[package]]13804[[package]]
13670name = "staging-xcm-executor"13805name = "staging-xcm-executor"
13671version = "1.0.0"13806version = "4.0.0"
13672source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13807source = "registry+https://github.com/rust-lang/crates.io-index"
13808checksum = "3a85a421053f810f3ed988ba3cc39d926c95f70f1ae73282aa8cd5c50072173b"
13673dependencies = [13809dependencies = [
13674 "environmental",13810 "environmental",
13675 "frame-benchmarking",13811 "frame-benchmarking",
13740source = "registry+https://github.com/rust-lang/crates.io-index"13876source = "registry+https://github.com/rust-lang/crates.io-index"
13741checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"13877checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
13742dependencies = [13878dependencies = [
13743 "strum_macros",13879 "strum_macros 0.24.3",
13744]13880]
1374513881
13746[[package]]13882[[package]]
13883name = "strum"
13884version = "0.25.0"
13885source = "registry+https://github.com/rust-lang/crates.io-index"
13886checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
13887
13888[[package]]
13747name = "strum_macros"13889name = "strum_macros"
13748version = "0.24.3"13890version = "0.24.3"
13749source = "registry+https://github.com/rust-lang/crates.io-index"13891source = "registry+https://github.com/rust-lang/crates.io-index"
13757]13899]
1375813900
13759[[package]]13901[[package]]
13902name = "strum_macros"
13903version = "0.25.3"
13904source = "registry+https://github.com/rust-lang/crates.io-index"
13905checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
13906dependencies = [
13907 "heck",
13908 "proc-macro2",
13909 "quote",
13910 "rustversion",
13911 "syn 2.0.39",
13912]
13913
13914[[package]]
13760name = "stun"13915name = "stun"
13761version = "0.4.4"13916version = "0.4.4"
13762source = "registry+https://github.com/rust-lang/crates.io-index"13917source = "registry+https://github.com/rust-lang/crates.io-index"
13768 "md-5",13923 "md-5",
13769 "rand 0.8.5",13924 "rand 0.8.5",
13770 "ring 0.16.20",13925 "ring 0.16.20",
13771 "subtle",13926 "subtle 2.4.1",
13772 "thiserror",13927 "thiserror",
13773 "tokio",13928 "tokio",
13774 "url",13929 "url",
1377713932
13778[[package]]13933[[package]]
13779name = "substrate-bip39"13934name = "substrate-bip39"
13780version = "0.4.4"13935version = "0.4.5"
13781source = "registry+https://github.com/rust-lang/crates.io-index"13936source = "registry+https://github.com/rust-lang/crates.io-index"
13782checksum = "49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733c"13937checksum = "e620c7098893ba667438b47169c00aacdd9e7c10e042250ce2b60b087ec97328"
13783dependencies = [13938dependencies = [
13784 "hmac 0.11.0",13939 "hmac 0.11.0",
13785 "pbkdf2 0.8.0",13940 "pbkdf2 0.8.0",
1379013945
13791[[package]]13946[[package]]
13792name = "substrate-build-script-utils"13947name = "substrate-build-script-utils"
13793version = "3.0.0"13948version = "9.0.0"
13794source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13949source = "registry+https://github.com/rust-lang/crates.io-index"
13950checksum = "8a3b7556a62d77b7b8abc34e425817f6f563c2f2aa7142f1c4e93e6422156cc1"
1379513951
13796[[package]]13952[[package]]
13797name = "substrate-frame-rpc-system"13953name = "substrate-frame-rpc-system"
13798version = "4.0.0-dev"13954version = "25.0.0"
13799source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13955source = "registry+https://github.com/rust-lang/crates.io-index"
13956checksum = "4c241af714c378075b1185e574202cbb9105e849b8c9ea44ef87880bdb3e9a75"
13800dependencies = [13957dependencies = [
13801 "frame-system-rpc-runtime-api",13958 "frame-system-rpc-runtime-api",
13802 "futures",13959 "futures",
1381413971
13815[[package]]13972[[package]]
13816name = "substrate-prometheus-endpoint"13973name = "substrate-prometheus-endpoint"
13817version = "0.10.0-dev"13974version = "0.16.0"
13818source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13975source = "registry+https://github.com/rust-lang/crates.io-index"
13976checksum = "ededbe617291db8a47d6e5155486ff1e5425f0bbf5dcb7f752730466a62bd293"
13819dependencies = [13977dependencies = [
13820 "hyper",13978 "hyper",
13821 "log",13979 "log",
1382613984
13827[[package]]13985[[package]]
13828name = "substrate-rpc-client"13986name = "substrate-rpc-client"
13829version = "0.10.0-dev"13987version = "0.30.0"
13830source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"13988source = "registry+https://github.com/rust-lang/crates.io-index"
13989checksum = "5575c2bef89385e5406565b8fe5620856d414e3846c60927a78f0788cb288c8c"
13831dependencies = [13990dependencies = [
13832 "async-trait",13991 "async-trait",
13833 "jsonrpsee",13992 "jsonrpsee",
1383913998
13840[[package]]13999[[package]]
13841name = "substrate-state-trie-migration-rpc"14000name = "substrate-state-trie-migration-rpc"
13842version = "4.0.0-dev"14001version = "24.0.0"
13843source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"14002source = "registry+https://github.com/rust-lang/crates.io-index"
14003checksum = "d57888ccce554552c535346893a497d2cfd232f15b6b676d130cdd5bf3f2ccea"
13844dependencies = [14004dependencies = [
13845 "jsonrpsee",14005 "jsonrpsee",
13846 "parity-scale-codec",14006 "parity-scale-codec",
13851 "sp-runtime",14011 "sp-runtime",
13852 "sp-state-machine",14012 "sp-state-machine",
13853 "sp-trie",14013 "sp-trie",
13854 "trie-db",14014 "trie-db 0.28.0",
13855]14015]
1385614016
13857[[package]]14017[[package]]
13858name = "substrate-wasm-builder"14018name = "substrate-wasm-builder"
13859version = "5.0.0-dev"14019version = "14.0.0"
13860source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"14020source = "registry+https://github.com/rust-lang/crates.io-index"
14021checksum = "12ab1707dbbd129622b771a9b80b25f0ebf1c04854b907bc44b51ec96fb4005b"
13861dependencies = [14022dependencies = [
13862 "ansi_term",14023 "ansi_term",
13863 "build-helper",14024 "build-helper",
13864 "cargo_metadata",14025 "cargo_metadata",
13865 "filetime",14026 "filetime",
13866 "parity-wasm",14027 "parity-wasm",
13867 "sp-maybe-compressed-blob",14028 "sp-maybe-compressed-blob",
13868 "strum",14029 "strum 0.24.1",
13869 "tempfile",14030 "tempfile",
13870 "toml 0.7.8",14031 "toml 0.7.8",
13871 "walkdir",14032 "walkdir",
1388314044
13884[[package]]14045[[package]]
13885name = "subtle"14046name = "subtle"
14047version = "1.0.0"
14048source = "registry+https://github.com/rust-lang/crates.io-index"
14049checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
14050
14051[[package]]
14052name = "subtle"
13886version = "2.4.1"14053version = "2.4.1"
13887source = "registry+https://github.com/rust-lang/crates.io-index"14054source = "registry+https://github.com/rust-lang/crates.io-index"
13888checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"14055checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
1390614073
13907[[package]]14074[[package]]
13908name = "syn"14075name = "syn"
13909version = "2.0.37"14076version = "2.0.39"
13910source = "registry+https://github.com/rust-lang/crates.io-index"14077source = "registry+https://github.com/rust-lang/crates.io-index"
13911checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"14078checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
13912dependencies = [14079dependencies = [
13913 "proc-macro2",14080 "proc-macro2",
13914 "quote",14081 "quote",
1395614123
13957[[package]]14124[[package]]
13958name = "target-lexicon"14125name = "target-lexicon"
13959version = "0.12.11"14126version = "0.12.12"
13960source = "registry+https://github.com/rust-lang/crates.io-index"14127source = "registry+https://github.com/rust-lang/crates.io-index"
13961checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"14128checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
1396214129
13963[[package]]14130[[package]]
13964name = "tempfile"14131name = "tempfile"
13965version = "3.8.0"14132version = "3.8.1"
13966source = "registry+https://github.com/rust-lang/crates.io-index"14133source = "registry+https://github.com/rust-lang/crates.io-index"
13967checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"14134checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
13968dependencies = [14135dependencies = [
13969 "cfg-if",14136 "cfg-if",
13970 "fastrand 2.0.1",14137 "fastrand 2.0.1",
13971 "redox_syscall 0.3.5",14138 "redox_syscall 0.4.1",
13972 "rustix 0.38.15",14139 "rustix 0.38.25",
13973 "windows-sys 0.48.0",14140 "windows-sys 0.48.0",
13974]14141]
1397514142
13976[[package]]14143[[package]]
13977name = "termcolor"14144name = "termcolor"
13978version = "1.3.0"14145version = "1.4.0"
13979source = "registry+https://github.com/rust-lang/crates.io-index"14146source = "registry+https://github.com/rust-lang/crates.io-index"
13980checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"14147checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
13981dependencies = [14148dependencies = [
13982 "winapi-util",14149 "winapi-util",
13983]14150]
1402214189
14023[[package]]14190[[package]]
14024name = "thiserror"14191name = "thiserror"
14025version = "1.0.49"14192version = "1.0.50"
14026source = "registry+https://github.com/rust-lang/crates.io-index"14193source = "registry+https://github.com/rust-lang/crates.io-index"
14027checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"14194checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
14028dependencies = [14195dependencies = [
14029 "thiserror-impl",14196 "thiserror-impl",
14030]14197]
1403114198
14032[[package]]14199[[package]]
14033name = "thiserror-core"14200name = "thiserror-core"
14034version = "1.0.38"14201version = "1.0.50"
14035source = "registry+https://github.com/rust-lang/crates.io-index"14202source = "registry+https://github.com/rust-lang/crates.io-index"
14036checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497"14203checksum = "c001ee18b7e5e3f62cbf58c7fe220119e68d902bb7443179c0c8aef30090e999"
14037dependencies = [14204dependencies = [
14038 "thiserror-core-impl",14205 "thiserror-core-impl",
14039]14206]
1404014207
14041[[package]]14208[[package]]
14042name = "thiserror-core-impl"14209name = "thiserror-core-impl"
14043version = "1.0.38"14210version = "1.0.50"
14044source = "registry+https://github.com/rust-lang/crates.io-index"14211source = "registry+https://github.com/rust-lang/crates.io-index"
14045checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac"14212checksum = "e4c60d69f36615a077cc7663b9cb8e42275722d23e58a7fa3d2c7f2915d09d04"
14046dependencies = [14213dependencies = [
14047 "proc-macro2",14214 "proc-macro2",
14048 "quote",14215 "quote",
14049 "syn 1.0.109",14216 "syn 2.0.39",
14050]14217]
1405114218
14052[[package]]14219[[package]]
14053name = "thiserror-impl"14220name = "thiserror-impl"
14054version = "1.0.49"14221version = "1.0.50"
14055source = "registry+https://github.com/rust-lang/crates.io-index"14222source = "registry+https://github.com/rust-lang/crates.io-index"
14056checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"14223checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
14057dependencies = [14224dependencies = [
14058 "proc-macro2",14225 "proc-macro2",
14059 "quote",14226 "quote",
14060 "syn 2.0.37",14227 "syn 2.0.39",
14061]14228]
1406214229
14063[[package]]14230[[package]]
1412114288
14122[[package]]14289[[package]]
14123name = "time"14290name = "time"
14124version = "0.3.29"14291version = "0.3.30"
14125source = "registry+https://github.com/rust-lang/crates.io-index"14292source = "registry+https://github.com/rust-lang/crates.io-index"
14126checksum = "426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fe"14293checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
14127dependencies = [14294dependencies = [
14128 "deranged",14295 "deranged",
14129 "itoa",14296 "itoa",
14297 "powerfmt",
14130 "serde",14298 "serde",
14131 "time-core",14299 "time-core",
14132 "time-macros",14300 "time-macros",
1420214370
14203[[package]]14371[[package]]
14204name = "tokio"14372name = "tokio"
14205version = "1.32.0"14373version = "1.34.0"
14206source = "registry+https://github.com/rust-lang/crates.io-index"14374source = "registry+https://github.com/rust-lang/crates.io-index"
14207checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"14375checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
14208dependencies = [14376dependencies = [
14209 "backtrace",14377 "backtrace",
14210 "bytes",14378 "bytes",
14214 "parking_lot 0.12.1",14382 "parking_lot 0.12.1",
14215 "pin-project-lite 0.2.13",14383 "pin-project-lite 0.2.13",
14216 "signal-hook-registry",14384 "signal-hook-registry",
14217 "socket2 0.5.4",14385 "socket2 0.5.5",
14218 "tokio-macros",14386 "tokio-macros",
14219 "windows-sys 0.48.0",14387 "windows-sys 0.48.0",
14220]14388]
1422114389
14222[[package]]14390[[package]]
14223name = "tokio-macros"14391name = "tokio-macros"
14224version = "2.1.0"14392version = "2.2.0"
14225source = "registry+https://github.com/rust-lang/crates.io-index"14393source = "registry+https://github.com/rust-lang/crates.io-index"
14226checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"14394checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
14227dependencies = [14395dependencies = [
14228 "proc-macro2",14396 "proc-macro2",
14229 "quote",14397 "quote",
14230 "syn 2.0.37",14398 "syn 2.0.39",
14231]14399]
1423214400
14233[[package]]14401[[package]]
14247source = "registry+https://github.com/rust-lang/crates.io-index"14415source = "registry+https://github.com/rust-lang/crates.io-index"
14248checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"14416checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
14249dependencies = [14417dependencies = [
14250 "rustls 0.21.7",14418 "rustls 0.21.9",
14251 "tokio",14419 "tokio",
14252]14420]
1425314421
1426514433
14266[[package]]14434[[package]]
14267name = "tokio-util"14435name = "tokio-util"
14268version = "0.7.9"14436version = "0.7.10"
14269source = "registry+https://github.com/rust-lang/crates.io-index"14437source = "registry+https://github.com/rust-lang/crates.io-index"
14270checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"14438checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
14271dependencies = [14439dependencies = [
14272 "bytes",14440 "bytes",
14273 "futures-core",14441 "futures-core",
14296 "serde",14464 "serde",
14297 "serde_spanned",14465 "serde_spanned",
14298 "toml_datetime",14466 "toml_datetime",
14299 "toml_edit",14467 "toml_edit 0.19.15",
14300]14468]
1430114469
14302[[package]]14470[[package]]
14303name = "toml_datetime"14471name = "toml_datetime"
14304version = "0.6.3"14472version = "0.6.5"
14305source = "registry+https://github.com/rust-lang/crates.io-index"14473source = "registry+https://github.com/rust-lang/crates.io-index"
14306checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"14474checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
14307dependencies = [14475dependencies = [
14308 "serde",14476 "serde",
14309]14477]
14314source = "registry+https://github.com/rust-lang/crates.io-index"14482source = "registry+https://github.com/rust-lang/crates.io-index"
14315checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"14483checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
14316dependencies = [14484dependencies = [
14317 "indexmap 2.0.2",14485 "indexmap 2.1.0",
14318 "serde",14486 "serde",
14319 "serde_spanned",14487 "serde_spanned",
14320 "toml_datetime",14488 "toml_datetime",
14321 "winnow",14489 "winnow",
14322]14490]
1432314491
14324[[package]]14492[[package]]
14493name = "toml_edit"
14494version = "0.20.7"
14495source = "registry+https://github.com/rust-lang/crates.io-index"
14496checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
14497dependencies = [
14498 "indexmap 2.1.0",
14499 "toml_datetime",
14500 "winnow",
14501]
14502
14503[[package]]
14325name = "tower"14504name = "tower"
14326version = "0.4.13"14505version = "0.4.13"
14327source = "registry+https://github.com/rust-lang/crates.io-index"14506source = "registry+https://github.com/rust-lang/crates.io-index"
14338source = "registry+https://github.com/rust-lang/crates.io-index"14517source = "registry+https://github.com/rust-lang/crates.io-index"
14339checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"14518checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
14340dependencies = [14519dependencies = [
14341 "bitflags 2.4.0",14520 "bitflags 2.4.1",
14342 "bytes",14521 "bytes",
14343 "futures-core",14522 "futures-core",
14344 "futures-util",14523 "futures-util",
1436414543
14365[[package]]14544[[package]]
14366name = "tracing"14545name = "tracing"
14367version = "0.1.37"14546version = "0.1.40"
14368source = "registry+https://github.com/rust-lang/crates.io-index"14547source = "registry+https://github.com/rust-lang/crates.io-index"
14369checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"14548checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
14370dependencies = [14549dependencies = [
14371 "cfg-if",
14372 "log",14550 "log",
14373 "pin-project-lite 0.2.13",14551 "pin-project-lite 0.2.13",
14374 "tracing-attributes",14552 "tracing-attributes",
1437714555
14378[[package]]14556[[package]]
14379name = "tracing-attributes"14557name = "tracing-attributes"
14380version = "0.1.26"14558version = "0.1.27"
14381source = "registry+https://github.com/rust-lang/crates.io-index"14559source = "registry+https://github.com/rust-lang/crates.io-index"
14382checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"14560checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
14383dependencies = [14561dependencies = [
14384 "proc-macro2",14562 "proc-macro2",
14385 "quote",14563 "quote",
14386 "syn 2.0.37",14564 "syn 2.0.39",
14387]14565]
1438814566
14389[[package]]14567[[package]]
14390name = "tracing-core"14568name = "tracing-core"
14391version = "0.1.31"14569version = "0.1.32"
14392source = "registry+https://github.com/rust-lang/crates.io-index"14570source = "registry+https://github.com/rust-lang/crates.io-index"
14393checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"14571checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
14394dependencies = [14572dependencies = [
14395 "once_cell",14573 "once_cell",
14396 "valuable",14574 "valuable",
1440814586
14409[[package]]14587[[package]]
14410name = "tracing-gum"14588name = "tracing-gum"
14411version = "1.0.0"14589version = "4.0.0"
14412source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"14590source = "registry+https://github.com/rust-lang/crates.io-index"
14591checksum = "32c0555bd635d9adbf8dec0bf45f7c2aef7541121d648ba37f5f792a211077b6"
14413dependencies = [14592dependencies = [
14414 "coarsetime",14593 "coarsetime",
14415 "polkadot-node-jaeger",14594 "polkadot-node-jaeger",
1442014599
14421[[package]]14600[[package]]
14422name = "tracing-gum-proc-macro"14601name = "tracing-gum-proc-macro"
14423version = "1.0.0"14602version = "4.0.0"
14424source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"14603source = "registry+https://github.com/rust-lang/crates.io-index"
14604checksum = "35756d8c1a227ec525853a1080bf890d03d939deb2bc50d4d43c96516c795d0d"
14425dependencies = [14605dependencies = [
14426 "expander 2.0.0",14606 "expander 2.0.0",
14427 "proc-macro-crate",14607 "proc-macro-crate 1.3.1",
14428 "proc-macro2",14608 "proc-macro2",
14429 "quote",14609 "quote",
14430 "syn 2.0.37",14610 "syn 2.0.39",
14431]14611]
1443214612
14433[[package]]14613[[package]]
14434name = "tracing-log"14614name = "tracing-log"
14435version = "0.1.3"14615version = "0.1.4"
14436source = "registry+https://github.com/rust-lang/crates.io-index"14616source = "registry+https://github.com/rust-lang/crates.io-index"
14437checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"14617checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
14438dependencies = [14618dependencies = [
14439 "lazy_static",
14440 "log",14619 "log",
14620 "once_cell",
14441 "tracing-core",14621 "tracing-core",
14442]14622]
1444314623
14483 "hash-db 0.16.0",14663 "hash-db 0.16.0",
14484 "hashbrown 0.13.2",14664 "hashbrown 0.13.2",
14485 "log",14665 "log",
14666 "smallvec",
14667]
14668
14669[[package]]
14670name = "trie-db"
14671version = "0.28.0"
14672source = "registry+https://github.com/rust-lang/crates.io-index"
14673checksum = "ff28e0f815c2fea41ebddf148e008b077d2faddb026c9555b29696114d602642"
14674dependencies = [
14675 "hash-db 0.16.0",
14676 "hashbrown 0.13.2",
14677 "log",
14486 "rustc-hex",14678 "rustc-hex",
14487 "smallvec",14679 "smallvec",
14488]14680]
14524 "lazy_static",14716 "lazy_static",
14525 "rand 0.8.5",14717 "rand 0.8.5",
14526 "smallvec",14718 "smallvec",
14527 "socket2 0.4.9",14719 "socket2 0.4.10",
14528 "thiserror",14720 "thiserror",
14529 "tinyvec",14721 "tinyvec",
14530 "tokio",14722 "tokio",
1456014752
14561[[package]]14753[[package]]
14562name = "try-runtime-cli"14754name = "try-runtime-cli"
14563version = "0.10.0-dev"14755version = "0.35.0"
14564source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"14756source = "registry+https://github.com/rust-lang/crates.io-index"
14757checksum = "845090aa8572116b06813914fc1d09448fe895d82982b63d58de4f91b4eb79b6"
14565dependencies = [14758dependencies = [
14566 "async-trait",14759 "async-trait",
14567 "clap",14760 "clap",
14662 "sp-runtime",14855 "sp-runtime",
14663 "sp-state-machine",14856 "sp-state-machine",
14664 "sp-trie",14857 "sp-trie",
14665 "trie-db",14858 "trie-db 0.27.1",
14666 "unique-runtime",14859 "unique-runtime",
14667 "up-common",14860 "up-common",
14668 "up-data-structs",14861 "up-data-structs",
1472414917
14725[[package]]14918[[package]]
14726name = "unique-node"14919name = "unique-node"
14727version = "1.1.0"14920version = "1.2.0"
14728dependencies = [14921dependencies = [
14729 "app-promotion-rpc",14922 "app-promotion-rpc",
14730 "clap",14923 "clap",
1480815001
14809[[package]]15002[[package]]
14810name = "unique-runtime"15003name = "unique-runtime"
14811version = "1.1.0"15004version = "1.2.0"
14812dependencies = [15005dependencies = [
14813 "app-promotion-rpc",15006 "app-promotion-rpc",
14814 "cumulus-pallet-aura-ext",15007 "cumulus-pallet-aura-ext",
14884 "pallet-unique",15077 "pallet-unique",
14885 "pallet-utility",15078 "pallet-utility",
14886 "pallet-xcm",15079 "pallet-xcm",
14887 "parachain-info",
14888 "parity-scale-codec",15080 "parity-scale-codec",
14889 "polkadot-parachain-primitives",15081 "polkadot-parachain-primitives",
15082 "polkadot-runtime-common",
14890 "precompile-utils-macro",15083 "precompile-utils-macro",
14891 "scale-info",15084 "scale-info",
14892 "serde",15085 "serde",
14905 "sp-storage",15098 "sp-storage",
14906 "sp-transaction-pool",15099 "sp-transaction-pool",
14907 "sp-version",15100 "sp-version",
15101 "staging-parachain-info",
14908 "staging-xcm",15102 "staging-xcm",
14909 "staging-xcm-builder",15103 "staging-xcm-builder",
14910 "staging-xcm-executor",15104 "staging-xcm-executor",
14923checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"15117checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
14924dependencies = [15118dependencies = [
14925 "generic-array 0.14.7",15119 "generic-array 0.14.7",
14926 "subtle",15120 "subtle 2.4.1",
14927]15121]
1492815122
14929[[package]]15123[[package]]
14933checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"15127checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
14934dependencies = [15128dependencies = [
14935 "crypto-common",15129 "crypto-common",
14936 "subtle",15130 "subtle 2.4.1",
14937]15131]
1493815132
14939[[package]]15133[[package]]
14955checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"15149checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
1495615150
14957[[package]]15151[[package]]
15152name = "untrusted"
15153version = "0.9.0"
15154source = "registry+https://github.com/rust-lang/crates.io-index"
15155checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
15156
15157[[package]]
14958name = "up-common"15158name = "up-common"
14959version = "1.1.0"15159version = "1.2.0"
14960dependencies = [15160dependencies = [
14961 "cumulus-primitives-core",15161 "cumulus-primitives-core",
14962 "fp-rpc",15162 "fp-rpc",
15017[[package]]15217[[package]]
15018name = "up-sponsorship"15218name = "up-sponsorship"
15019version = "0.1.0"15219version = "0.1.0"
15020source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v1.1.0#2fbec92640f517e4812be7ed61ef7691af6e0bba"15220source = "git+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v1.3.0#6071a67116a08ef81083337360de376b63c0ea1c"
15021dependencies = [15221dependencies = [
15022 "impl-trait-for-tuples",15222 "impl-trait-for-tuples",
15023]15223]
1504115241
15042[[package]]15242[[package]]
15043name = "uuid"15243name = "uuid"
15044version = "1.4.1"15244version = "1.6.1"
15045source = "registry+https://github.com/rust-lang/crates.io-index"15245source = "registry+https://github.com/rust-lang/crates.io-index"
15046checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"15246checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
15047dependencies = [15247dependencies = [
15048 "getrandom 0.2.10",15248 "getrandom 0.2.11",
15049]15249]
1505015250
15051[[package]]15251[[package]]
15073checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"15273checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
1507415274
15075[[package]]15275[[package]]
15276name = "w3f-bls"
15277version = "0.1.3"
15278source = "registry+https://github.com/rust-lang/crates.io-index"
15279checksum = "7335e4c132c28cc43caef6adb339789e599e39adbe78da0c4d547fad48cbc331"
15280dependencies = [
15281 "ark-bls12-377",
15282 "ark-bls12-381",
15283 "ark-ec",
15284 "ark-ff",
15285 "ark-serialize",
15286 "ark-serialize-derive",
15287 "arrayref",
15288 "constcat",
15289 "digest 0.10.7",
15290 "rand 0.8.5",
15291 "rand_chacha 0.3.1",
15292 "rand_core 0.6.4",
15293 "sha2 0.10.8",
15294 "sha3 0.10.8",
15295 "thiserror",
15296 "zeroize",
15297]
15298
15299[[package]]
15076name = "waitgroup"15300name = "waitgroup"
15077version = "0.1.2"15301version = "0.1.2"
15078source = "registry+https://github.com/rust-lang/crates.io-index"15302source = "registry+https://github.com/rust-lang/crates.io-index"
1512015344
15121[[package]]15345[[package]]
15122name = "wasm-bindgen"15346name = "wasm-bindgen"
15123version = "0.2.87"15347version = "0.2.88"
15124source = "registry+https://github.com/rust-lang/crates.io-index"15348source = "registry+https://github.com/rust-lang/crates.io-index"
15125checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"15349checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
15126dependencies = [15350dependencies = [
15127 "cfg-if",15351 "cfg-if",
15128 "wasm-bindgen-macro",15352 "wasm-bindgen-macro",
15129]15353]
1513015354
15131[[package]]15355[[package]]
15132name = "wasm-bindgen-backend"15356name = "wasm-bindgen-backend"
15133version = "0.2.87"15357version = "0.2.88"
15134source = "registry+https://github.com/rust-lang/crates.io-index"15358source = "registry+https://github.com/rust-lang/crates.io-index"
15135checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"15359checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
15136dependencies = [15360dependencies = [
15137 "bumpalo",15361 "bumpalo",
15138 "log",15362 "log",
15139 "once_cell",15363 "once_cell",
15140 "proc-macro2",15364 "proc-macro2",
15141 "quote",15365 "quote",
15142 "syn 2.0.37",15366 "syn 2.0.39",
15143 "wasm-bindgen-shared",15367 "wasm-bindgen-shared",
15144]15368]
1514515369
15146[[package]]15370[[package]]
15147name = "wasm-bindgen-futures"15371name = "wasm-bindgen-futures"
15148version = "0.4.37"15372version = "0.4.38"
15149source = "registry+https://github.com/rust-lang/crates.io-index"15373source = "registry+https://github.com/rust-lang/crates.io-index"
15150checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"15374checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02"
15151dependencies = [15375dependencies = [
15152 "cfg-if",15376 "cfg-if",
15153 "js-sys",15377 "js-sys",
1515715381
15158[[package]]15382[[package]]
15159name = "wasm-bindgen-macro"15383name = "wasm-bindgen-macro"
15160version = "0.2.87"15384version = "0.2.88"
15161source = "registry+https://github.com/rust-lang/crates.io-index"15385source = "registry+https://github.com/rust-lang/crates.io-index"
15162checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"15386checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
15163dependencies = [15387dependencies = [
15164 "quote",15388 "quote",
15165 "wasm-bindgen-macro-support",15389 "wasm-bindgen-macro-support",
15166]15390]
1516715391
15168[[package]]15392[[package]]
15169name = "wasm-bindgen-macro-support"15393name = "wasm-bindgen-macro-support"
15170version = "0.2.87"15394version = "0.2.88"
15171source = "registry+https://github.com/rust-lang/crates.io-index"15395source = "registry+https://github.com/rust-lang/crates.io-index"
15172checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"15396checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
15173dependencies = [15397dependencies = [
15174 "proc-macro2",15398 "proc-macro2",
15175 "quote",15399 "quote",
15176 "syn 2.0.37",15400 "syn 2.0.39",
15177 "wasm-bindgen-backend",15401 "wasm-bindgen-backend",
15178 "wasm-bindgen-shared",15402 "wasm-bindgen-shared",
15179]15403]
1518015404
15181[[package]]15405[[package]]
15182name = "wasm-bindgen-shared"15406name = "wasm-bindgen-shared"
15183version = "0.2.87"15407version = "0.2.88"
15184source = "registry+https://github.com/rust-lang/crates.io-index"15408source = "registry+https://github.com/rust-lang/crates.io-index"
15185checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"15409checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
1518615410
15187[[package]]15411[[package]]
15188name = "wasm-instrument"15412name = "wasm-instrument"
1519515419
15196[[package]]15420[[package]]
15197name = "wasm-opt"15421name = "wasm-opt"
15198version = "0.114.1"15422version = "0.116.0"
15199source = "registry+https://github.com/rust-lang/crates.io-index"15423source = "registry+https://github.com/rust-lang/crates.io-index"
15200checksum = "4d005a95f934878a1fb446a816d51c3601a0120ff929005ba3bab3c749cfd1c7"15424checksum = "fc942673e7684671f0c5708fc18993569d184265fd5223bb51fc8e5b9b6cfd52"
15201dependencies = [15425dependencies = [
15202 "anyhow",15426 "anyhow",
15203 "libc",15427 "libc",
15204 "strum",15428 "strum 0.24.1",
15205 "strum_macros",15429 "strum_macros 0.24.3",
15206 "tempfile",15430 "tempfile",
15207 "thiserror",15431 "thiserror",
15208 "wasm-opt-cxx-sys",15432 "wasm-opt-cxx-sys",
1521115435
15212[[package]]15436[[package]]
15213name = "wasm-opt-cxx-sys"15437name = "wasm-opt-cxx-sys"
15214version = "0.114.1"15438version = "0.116.0"
15215source = "registry+https://github.com/rust-lang/crates.io-index"15439source = "registry+https://github.com/rust-lang/crates.io-index"
15216checksum = "6d04e240598162810fad3b2e96fa0dec6dba1eb65a03f3bd99a9248ab8b56caa"15440checksum = "8c57b28207aa724318fcec6575fe74803c23f6f266fce10cbc9f3f116762f12e"
15217dependencies = [15441dependencies = [
15218 "anyhow",15442 "anyhow",
15219 "cxx",15443 "cxx",
1522315447
15224[[package]]15448[[package]]
15225name = "wasm-opt-sys"15449name = "wasm-opt-sys"
15226version = "0.114.1"15450version = "0.116.0"
15227source = "registry+https://github.com/rust-lang/crates.io-index"15451source = "registry+https://github.com/rust-lang/crates.io-index"
15228checksum = "2efd2aaca519d64098c4faefc8b7433a97ed511caf4c9e516384eb6aef1ff4f9"15452checksum = "8a1cce564dc768dacbdb718fc29df2dba80bd21cb47d8f77ae7e3d95ceb98cbe"
15229dependencies = [15453dependencies = [
15230 "anyhow",15454 "anyhow",
15231 "cc",15455 "cc",
15342checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213"15566checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213"
15343dependencies = [15567dependencies = [
15344 "anyhow",15568 "anyhow",
15345 "base64 0.21.4",15569 "base64 0.21.5",
15346 "bincode",15570 "bincode",
15347 "directories-next",15571 "directories-next",
15348 "file-per-thread-logger",15572 "file-per-thread-logger",
15349 "log",15573 "log",
15350 "rustix 0.36.15",15574 "rustix 0.36.17",
15351 "serde",15575 "serde",
15352 "sha2 0.10.8",15576 "sha2 0.10.8",
15353 "toml 0.5.11",15577 "toml 0.5.11",
15443dependencies = [15667dependencies = [
15444 "object 0.30.4",15668 "object 0.30.4",
15445 "once_cell",15669 "once_cell",
15446 "rustix 0.36.15",15670 "rustix 0.36.17",
15447]15671]
1544815672
15449[[package]]15673[[package]]
15474 "memoffset 0.8.0",15698 "memoffset 0.8.0",
15475 "paste",15699 "paste",
15476 "rand 0.8.5",15700 "rand 0.8.5",
15477 "rustix 0.36.15",15701 "rustix 0.36.17",
15478 "wasmtime-asm-macros",15702 "wasmtime-asm-macros",
15479 "wasmtime-environ",15703 "wasmtime-environ",
15480 "wasmtime-jit-debug",15704 "wasmtime-jit-debug",
1549515719
15496[[package]]15720[[package]]
15497name = "web-sys"15721name = "web-sys"
15498version = "0.3.64"15722version = "0.3.65"
15499source = "registry+https://github.com/rust-lang/crates.io-index"15723source = "registry+https://github.com/rust-lang/crates.io-index"
15500checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"15724checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85"
15501dependencies = [15725dependencies = [
15502 "js-sys",15726 "js-sys",
15503 "wasm-bindgen",15727 "wasm-bindgen",
15510checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"15734checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
15511dependencies = [15735dependencies = [
15512 "ring 0.16.20",15736 "ring 0.16.20",
15513 "untrusted",15737 "untrusted 0.7.1",
15514]15738]
1551515739
15516[[package]]15740[[package]]
15517name = "webpki"15741name = "webpki"
15518version = "0.22.2"15742version = "0.22.4"
15519source = "registry+https://github.com/rust-lang/crates.io-index"15743source = "registry+https://github.com/rust-lang/crates.io-index"
15520checksum = "07ecc0cd7cac091bf682ec5efa18b1cff79d617b84181f38b3951dbe135f607f"15744checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53"
15521dependencies = [15745dependencies = [
15522 "ring 0.16.20",15746 "ring 0.17.5",
15523 "untrusted",15747 "untrusted 0.9.0",
15524]15748]
1552515749
15526[[package]]15750[[package]]
15529source = "registry+https://github.com/rust-lang/crates.io-index"15753source = "registry+https://github.com/rust-lang/crates.io-index"
15530checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"15754checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
15531dependencies = [15755dependencies = [
15532 "webpki 0.22.2",15756 "webpki 0.22.4",
15533]15757]
1553415758
15535[[package]]15759[[package]]
15536name = "webpki-roots"15760name = "webpki-roots"
15537version = "0.23.1"
15538source = "registry+https://github.com/rust-lang/crates.io-index"
15539checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
15540dependencies = [
15541 "rustls-webpki 0.100.3",
15542]
15543
15544[[package]]
15545name = "webpki-roots"
15546version = "0.25.2"15761version = "0.25.2"
15547source = "registry+https://github.com/rust-lang/crates.io-index"15762source = "registry+https://github.com/rust-lang/crates.io-index"
15548checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"15763checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
15634 "sha1",15849 "sha1",
15635 "sha2 0.10.8",15850 "sha2 0.10.8",
15636 "signature 1.6.4",15851 "signature 1.6.4",
15637 "subtle",15852 "subtle 2.4.1",
15638 "thiserror",15853 "thiserror",
15639 "tokio",15854 "tokio",
15640 "webpki 0.21.4",15855 "webpki 0.21.4",
15674checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106"15889checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106"
15675dependencies = [15890dependencies = [
15676 "log",15891 "log",
15677 "socket2 0.4.9",15892 "socket2 0.4.10",
15678 "thiserror",15893 "thiserror",
15679 "tokio",15894 "tokio",
15680 "webrtc-util",15895 "webrtc-util",
15728 "rtcp",15943 "rtcp",
15729 "rtp",15944 "rtp",
15730 "sha-1",15945 "sha-1",
15731 "subtle",15946 "subtle 2.4.1",
15732 "thiserror",15947 "thiserror",
15733 "tokio",15948 "tokio",
15734 "webrtc-util",15949 "webrtc-util",
1575715972
15758[[package]]15973[[package]]
15759name = "westend-runtime"15974name = "westend-runtime"
15760version = "1.0.0"15975version = "4.0.0"
15761source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"15976source = "registry+https://github.com/rust-lang/crates.io-index"
15977checksum = "e833bb935995cb8da9848b974f37801c66163502929ecf22ca15878b8e8edbb7"
15762dependencies = [15978dependencies = [
15763 "binary-merkle-tree",15979 "binary-merkle-tree",
15764 "bitvec",15980 "bitvec",
15772 "frame-try-runtime",15988 "frame-try-runtime",
15773 "hex-literal",15989 "hex-literal",
15774 "log",15990 "log",
15991 "pallet-asset-rate",
15775 "pallet-authority-discovery",15992 "pallet-authority-discovery",
15776 "pallet-authorship",15993 "pallet-authorship",
15777 "pallet-babe",15994 "pallet-babe",
15780 "pallet-beefy",15997 "pallet-beefy",
15781 "pallet-beefy-mmr",15998 "pallet-beefy-mmr",
15782 "pallet-collective",15999 "pallet-collective",
16000 "pallet-conviction-voting",
15783 "pallet-democracy",16001 "pallet-democracy",
15784 "pallet-election-provider-multi-phase",16002 "pallet-election-provider-multi-phase",
15785 "pallet-election-provider-support-benchmarking",16003 "pallet-election-provider-support-benchmarking",
15786 "pallet-elections-phragmen",16004 "pallet-elections-phragmen",
15787 "pallet-fast-unstake",16005 "pallet-fast-unstake",
15788 "pallet-grandpa",16006 "pallet-grandpa",
15789 "pallet-identity 4.0.0-dev (git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0)",16007 "pallet-identity 25.0.0",
15790 "pallet-im-online",16008 "pallet-im-online",
15791 "pallet-indices",16009 "pallet-indices",
15792 "pallet-membership",16010 "pallet-membership",
15801 "pallet-preimage",16019 "pallet-preimage",
15802 "pallet-proxy",16020 "pallet-proxy",
15803 "pallet-recovery",16021 "pallet-recovery",
16022 "pallet-referenda",
15804 "pallet-scheduler",16023 "pallet-scheduler",
15805 "pallet-session",16024 "pallet-session",
15806 "pallet-session-benchmarking",16025 "pallet-session-benchmarking",
15816 "pallet-treasury",16035 "pallet-treasury",
15817 "pallet-utility",16036 "pallet-utility",
15818 "pallet-vesting",16037 "pallet-vesting",
16038 "pallet-whitelist",
15819 "pallet-xcm",16039 "pallet-xcm",
15820 "pallet-xcm-benchmarks",16040 "pallet-xcm-benchmarks",
15821 "parity-scale-codec",16041 "parity-scale-codec",
15830 "smallvec",16050 "smallvec",
15831 "sp-api",16051 "sp-api",
15832 "sp-application-crypto",16052 "sp-application-crypto",
16053 "sp-arithmetic",
15833 "sp-authority-discovery",16054 "sp-authority-discovery",
15834 "sp-block-builder",16055 "sp-block-builder",
15835 "sp-consensus-babe",16056 "sp-consensus-babe",
15836 "sp-consensus-beefy",16057 "sp-consensus-beefy",
15837 "sp-core",16058 "sp-core",
16059 "sp-genesis-builder",
15838 "sp-inherents",16060 "sp-inherents",
15839 "sp-io",16061 "sp-io",
15840 "sp-mmr-primitives",16062 "sp-mmr-primitives",
1585616078
15857[[package]]16079[[package]]
15858name = "westend-runtime-constants"16080name = "westend-runtime-constants"
15859version = "1.0.0"16081version = "4.0.0"
15860source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"16082source = "registry+https://github.com/rust-lang/crates.io-index"
16083checksum = "682c32c5f5e6d51c431bf66c33fc502c66e7b25488c0bd92f5ee020c329f2beb"
15861dependencies = [16084dependencies = [
15862 "frame-support",16085 "frame-support",
15863 "polkadot-primitives",16086 "polkadot-primitives",
15866 "sp-core",16089 "sp-core",
15867 "sp-runtime",16090 "sp-runtime",
15868 "sp-weights",16091 "sp-weights",
16092 "staging-xcm",
15869]16093]
1587016094
15871[[package]]16095[[package]]
15877 "either",16101 "either",
15878 "home",16102 "home",
15879 "once_cell",16103 "once_cell",
15880 "rustix 0.38.15",16104 "rustix 0.38.25",
15881]16105]
1588216106
15883[[package]]16107[[package]]
15884name = "wide"16108name = "wide"
15885version = "0.7.12"16109version = "0.7.13"
15886source = "registry+https://github.com/rust-lang/crates.io-index"16110source = "registry+https://github.com/rust-lang/crates.io-index"
15887checksum = "ebecebefc38ff1860b4bc47550bbfa63af5746061cf0d29fcd7fa63171602598"16111checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242"
15888dependencies = [16112dependencies = [
15889 "bytemuck",16113 "bytemuck",
15890 "safe_arch",16114 "safe_arch",
1592916153
15930[[package]]16154[[package]]
15931name = "windows"16155name = "windows"
15932version = "0.34.0"16156version = "0.51.1"
15933source = "registry+https://github.com/rust-lang/crates.io-index"16157source = "registry+https://github.com/rust-lang/crates.io-index"
15934checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f"16158checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
15935dependencies = [16159dependencies = [
15936 "windows_aarch64_msvc 0.34.0",16160 "windows-core",
15937 "windows_i686_gnu 0.34.0",16161 "windows-targets 0.48.5",
15938 "windows_i686_msvc 0.34.0",
15939 "windows_x86_64_gnu 0.34.0",
15940 "windows_x86_64_msvc 0.34.0",
15941]16162]
1594216163
15943[[package]]16164[[package]]
15944name = "windows"16165name = "windows-core"
15945version = "0.48.0"16166version = "0.51.1"
15946source = "registry+https://github.com/rust-lang/crates.io-index"16167source = "registry+https://github.com/rust-lang/crates.io-index"
15947checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"16168checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
15948dependencies = [16169dependencies = [
15949 "windows-targets 0.48.5",16170 "windows-targets 0.48.5",
15950]16171]
1601116232
16012[[package]]16233[[package]]
16013name = "windows_aarch64_msvc"16234name = "windows_aarch64_msvc"
16014version = "0.34.0"
16015source = "registry+https://github.com/rust-lang/crates.io-index"
16016checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
16017
16018[[package]]
16019name = "windows_aarch64_msvc"
16020version = "0.42.2"16235version = "0.42.2"
16021source = "registry+https://github.com/rust-lang/crates.io-index"16236source = "registry+https://github.com/rust-lang/crates.io-index"
16022checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"16237checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
1602916244
16030[[package]]16245[[package]]
16031name = "windows_i686_gnu"16246name = "windows_i686_gnu"
16032version = "0.34.0"
16033source = "registry+https://github.com/rust-lang/crates.io-index"
16034checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
16035
16036[[package]]
16037name = "windows_i686_gnu"
16038version = "0.42.2"16247version = "0.42.2"
16039source = "registry+https://github.com/rust-lang/crates.io-index"16248source = "registry+https://github.com/rust-lang/crates.io-index"
16040checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"16249checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
1604716256
16048[[package]]16257[[package]]
16049name = "windows_i686_msvc"16258name = "windows_i686_msvc"
16050version = "0.34.0"
16051source = "registry+https://github.com/rust-lang/crates.io-index"
16052checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
16053
16054[[package]]
16055name = "windows_i686_msvc"
16056version = "0.42.2"16259version = "0.42.2"
16057source = "registry+https://github.com/rust-lang/crates.io-index"16260source = "registry+https://github.com/rust-lang/crates.io-index"
16058checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"16261checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
1606516268
16066[[package]]16269[[package]]
16067name = "windows_x86_64_gnu"16270name = "windows_x86_64_gnu"
16068version = "0.34.0"
16069source = "registry+https://github.com/rust-lang/crates.io-index"
16070checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
16071
16072[[package]]
16073name = "windows_x86_64_gnu"
16074version = "0.42.2"16271version = "0.42.2"
16075source = "registry+https://github.com/rust-lang/crates.io-index"16272source = "registry+https://github.com/rust-lang/crates.io-index"
16076checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"16273checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
1609516292
16096[[package]]16293[[package]]
16097name = "windows_x86_64_msvc"16294name = "windows_x86_64_msvc"
16098version = "0.34.0"
16099source = "registry+https://github.com/rust-lang/crates.io-index"
16100checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
16101
16102[[package]]
16103name = "windows_x86_64_msvc"
16104version = "0.42.2"16295version = "0.42.2"
16105source = "registry+https://github.com/rust-lang/crates.io-index"16296source = "registry+https://github.com/rust-lang/crates.io-index"
16106checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"16297checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
1611316304
16114[[package]]16305[[package]]
16115name = "winnow"16306name = "winnow"
16116version = "0.5.15"16307version = "0.5.19"
16117source = "registry+https://github.com/rust-lang/crates.io-index"16308source = "registry+https://github.com/rust-lang/crates.io-index"
16118checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"16309checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
16119dependencies = [16310dependencies = [
16120 "memchr",16311 "memchr",
16121]16312]
1620116392
16202[[package]]16393[[package]]
16203name = "xcm-procedural"16394name = "xcm-procedural"
16204version = "1.0.0"16395version = "4.0.0"
16205source = "git+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7"16396source = "registry+https://github.com/rust-lang/crates.io-index"
16397checksum = "401e2b62628da9246dececb06fe58118196557dd8deb9ce12d95cc4aaf56003f"
16206dependencies = [16398dependencies = [
16207 "Inflector",16399 "Inflector",
16208 "proc-macro2",16400 "proc-macro2",
16209 "quote",16401 "quote",
16210 "syn 2.0.37",16402 "syn 2.0.39",
16211]16403]
1621216404
16213[[package]]16405[[package]]
16234]16426]
1623516427
16236[[package]]16428[[package]]
16429name = "zerocopy"
16430version = "0.7.26"
16431source = "registry+https://github.com/rust-lang/crates.io-index"
16432checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0"
16433dependencies = [
16434 "zerocopy-derive",
16435]
16436
16437[[package]]
16438name = "zerocopy-derive"
16439version = "0.7.26"
16440source = "registry+https://github.com/rust-lang/crates.io-index"
16441checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f"
16442dependencies = [
16443 "proc-macro2",
16444 "quote",
16445 "syn 2.0.39",
16446]
16447
16448[[package]]
16237name = "zeroize"16449name = "zeroize"
16238version = "1.6.0"16450version = "1.7.0"
16239source = "registry+https://github.com/rust-lang/crates.io-index"16451source = "registry+https://github.com/rust-lang/crates.io-index"
16240checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"16452checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
16241dependencies = [16453dependencies = [
16242 "zeroize_derive",16454 "zeroize_derive",
16243]16455]
16250dependencies = [16462dependencies = [
16251 "proc-macro2",16463 "proc-macro2",
16252 "quote",16464 "quote",
16253 "syn 2.0.37",16465 "syn 2.0.39",
16254]16466]
1625516467
16256[[package]]16468[[package]]
1629316505
16294[[package]]16506[[package]]
16295name = "zstd-sys"16507name = "zstd-sys"
16296version = "2.0.8+zstd.1.5.5"16508version = "2.0.9+zstd.1.5.5"
16297source = "registry+https://github.com/rust-lang/crates.io-index"16509source = "registry+https://github.com/rust-lang/crates.io-index"
16298checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"16510checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
16299dependencies = [16511dependencies = [
16300 "cc",16512 "cc",
16301 "libc",
16302 "pkg-config",16513 "pkg-config",
16303]16514]
1630416515
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,7 +11,7 @@
 	'runtime/tests',
 	'runtime/unique',
 ]
-package.version = "1.1.0"
+package.version = "1.2.0"
 resolver = "2"
 
 [profile.release]
@@ -34,7 +34,7 @@
 evm-coder = { version = "0.4.2", default-features = false, features = ['bondrewd'] }
 pallet-app-promotion = { path = "pallets/app-promotion", default-features = false }
 pallet-balances-adapter = { default-features = false, path = "pallets/balances-adapter" }
-pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.1.0" }
+pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.3.0" }
 pallet-collator-selection = { default-features = false, path = "pallets/collator-selection" }
 pallet-common = { default-features = false, path = "pallets/common" }
 pallet-configuration = { default-features = false, path = "pallets/configuration" }
@@ -61,7 +61,7 @@
 up-data-structs = { path = "primitives/data-structs", default-features = false }
 up-pov-estimate-rpc = { path = "primitives/pov-estimate-rpc", default-features = false }
 up-rpc = { path = "primitives/rpc", default-features = false }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.1.0" }
+up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v1.3.0" }
 
 # Unique: Runtimes
 opal-runtime = { path = "runtime/opal" }
@@ -69,140 +69,141 @@
 unique-runtime = { path = "runtime/unique" }
 
 # Frontier (Unique patches over the Parity version)
-fc-api = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
+fc-api = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
 fp-self-contained = { default-features = false, features = [
 	"serde",
-], git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
-pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.1.0" }
+], git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
+pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v1.3.0" }
 
 # Parity
 codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.6.5" }
-cumulus-client-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-client-collator = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-client-consensus-aura = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-client-consensus-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-client-consensus-proposer = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-client-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-client-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-pallet-aura-ext = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-pallet-dmp-queue = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-pallet-parachain-system = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-pallet-xcm = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-pallet-xcmp-queue = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-primitives-aura = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-primitives-core = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-primitives-parachain-inherent = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-primitives-timestamp = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-primitives-utility = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-relay-chain-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-frame-executive = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-aura = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-authorship = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-balances = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-collective = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-democracy = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-membership = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-preimage = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-ranked-collective = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-referenda = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-scheduler = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-session = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-state-trie-migration = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-sudo = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-treasury = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-utility = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0", default-features = false }
-parachain-info = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
+cumulus-client-cli = "0.4.0"
+cumulus-client-collator = "0.4.0"
+cumulus-client-consensus-aura = "0.4.0"
+cumulus-client-consensus-common = "0.4.0"
+cumulus-client-consensus-proposer = "0.4.0"
+cumulus-client-network = "0.4.0"
+cumulus-client-service = "0.4.0"
+cumulus-pallet-aura-ext = { default-features = false, version = "0.4.0" }
+cumulus-pallet-dmp-queue = { default-features = false, version = "0.4.0" }
+cumulus-pallet-parachain-system = { default-features = false, version = "0.4.0" }
+cumulus-pallet-xcm = { default-features = false, version = "0.4.0" }
+cumulus-pallet-xcmp-queue = { default-features = false, version = "0.4.0" }
+cumulus-primitives-aura = { default-features = false, version = "0.4.0" }
+cumulus-primitives-core = { default-features = false, version = "0.4.0" }
+cumulus-primitives-parachain-inherent = { default-features = false, version = "0.4.0" }
+cumulus-primitives-timestamp = { default-features = false, version = "0.4.0" }
+cumulus-primitives-utility = { default-features = false, version = "0.4.0" }
+cumulus-relay-chain-inprocess-interface = "0.4.0"
+cumulus-relay-chain-interface = "0.4.0"
+cumulus-relay-chain-minimal-node = "0.4.0"
+frame-executive = { default-features = false, version = "25.0.0" }
+frame-support = { default-features = false, version = "25.0.0" }
+frame-system = { default-features = false, version = "25.0.0" }
+frame-system-rpc-runtime-api = { default-features = false, version = "23.0.0" }
+pallet-aura = { default-features = false, version = "24.0.0" }
+pallet-authorship = { default-features = false, version = "25.0.0" }
+pallet-balances = { default-features = false, version = "25.0.0" }
+pallet-collective = { default-features = false, version = "25.0.0" }
+pallet-democracy = { default-features = false, version = "25.0.0" }
+pallet-membership = { default-features = false, version = "25.0.0" }
+pallet-preimage = { default-features = false, version = "25.0.0" }
+pallet-ranked-collective = { default-features = false, version = "25.0.0" }
+pallet-referenda = { default-features = false, version = "25.0.0" }
+pallet-scheduler = { default-features = false, version = "26.0.0" }
+pallet-session = { default-features = false, version = "25.0.0" }
+pallet-state-trie-migration = { default-features = false, version = "26.0.0" }
+pallet-sudo = { default-features = false, version = "25.0.0" }
+pallet-timestamp = { default-features = false, version = "24.0.0" }
+pallet-transaction-payment = { default-features = false, version = "25.0.0" }
+pallet-transaction-payment-rpc = "27.0.0"
+pallet-transaction-payment-rpc-runtime-api = { default-features = false, version = "25.0.0" }
+pallet-treasury = { default-features = false, version = "24.0.0" }
+pallet-utility = { default-features = false, version = "25.0.0" }
+pallet-xcm = { default-features = false, version = "4.0.0" }
 parity-scale-codec = { version = "3.6.5", features = ["derive"], default-features = false }
-polkadot-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0", default-features = false }
-polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-polkadot-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-chain-spec = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-rpc-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-sysinfo = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-tracing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
+polkadot-cli = "4.0.0"
+polkadot-parachain-primitives = { default-features = false, version = "3.0.0" }
+polkadot-primitives = "4.0.0"
+polkadot-runtime-common = { default-features = false, version = "4.0.0" }
+polkadot-service = "4.0.0"
+sc-basic-authorship = "0.31.0"
+sc-chain-spec = "24.0.0"
+sc-cli = "0.33.0"
+sc-client-api = "25.0.0"
+sc-consensus = "0.30.0"
+sc-consensus-manual-seal = "0.32.0"
+sc-executor = "0.29.0"
+sc-network = "0.31.0"
+sc-network-sync = "0.30.0"
+sc-rpc = "26.0.0"
+sc-rpc-api = "0.30.0"
+sc-service = "0.32.0"
+sc-sysinfo = "24.0.0"
+sc-telemetry = "12.0.0"
+sc-tracing = "25.0.0"
+sc-transaction-pool = "25.0.0"
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
-sp-api = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-block-builder = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-externalities = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-inherents = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-offchain = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-session = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-staking = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-state-machine = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-storage = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-trie = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-version = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-sp-weights = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-staging-xcm = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0", default-features = false }
-staging-xcm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0", default-features = false }
-staging-xcm-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0", default-features = false }
-substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
+sp-api = { default-features = false, version = "23.0.0" }
+sp-arithmetic = { default-features = false, version = "20.0.0" }
+sp-block-builder = { default-features = false, version = "23.0.0" }
+sp-blockchain = "25.0.0"
+sp-consensus-aura = { default-features = false, version = "0.29.0" }
+sp-core = { default-features = false, version = "25.0.0" }
+sp-externalities = "0.23.0"
+sp-inherents = { default-features = false, version = "23.0.0" }
+sp-io = { default-features = false, version = "27.0.0" }
+sp-keystore = "0.31.0"
+sp-offchain = { default-features = false, version = "23.0.0" }
+sp-runtime = { default-features = false, version = "28.0.0" }
+sp-session = { default-features = false, version = "24.0.0" }
+sp-staking = { default-features = false, version = "23.0.0" }
+sp-state-machine = "0.32.0"
+sp-std = { default-features = false, version = "12.0.0" }
+sp-storage = { default-features = false, version = "17.0.0" }
+sp-timestamp = "23.0.0"
+sp-tracing = "14.0.0"
+sp-transaction-pool = { default-features = false, version = "23.0.0" }
+sp-trie = { default-features = false, version = "26.0.0" }
+sp-version = { default-features = false, version = "26.0.0" }
+sp-weights = { default-features = false, version = "24.0.0" }
+staging-parachain-info = { default-features = false, version = "0.4.0" }
+staging-xcm = { default-features = false, version = "4.0.0" }
+staging-xcm-builder = { default-features = false, version = "4.0.0" }
+staging-xcm-executor = { default-features = false, version = "4.0.0" }
+substrate-frame-rpc-system = "25.0.0"
+substrate-prometheus-endpoint = "0.16.0"
 
 # Parity: Build utils
-substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
+substrate-build-script-utils = "9.0.0"
+substrate-wasm-builder = "14.0.0"
 
 # Parity: Benchmarking
-frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
+frame-benchmarking = { default-features = false, version = "25.0.0" }
+frame-benchmarking-cli = "29.0.0"
+frame-system-benchmarking = { default-features = false, version = "25.0.0" }
 
 # Parity: Try Runtime
-frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
-try-runtime-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "release-polkadot-v1.1.0" }
+frame-try-runtime = { default-features = false, version = "0.31.0" }
+try-runtime-cli = "0.35.0"
 
 # ORML
-orml-tokens = { default-features = false, git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v1.1.0" }
-orml-traits = { default-features = false, git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v1.1.0" }
-orml-vesting = { default-features = false, git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v1.1.0" }
-orml-xcm-support = { default-features = false, git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v1.1.0" }
-orml-xtokens = { default-features = false, git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v1.1.0" }
+orml-tokens = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
+orml-traits = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
+orml-vesting = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
+orml-xcm-support = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
+orml-xtokens = { default-features = false, git = "https://github.com/uniquenetwork/open-runtime-module-library", branch = "unique-polkadot-v1.3.0" }
 
 # Other
 derivative = { version = "2.2.0", features = ["use_core"] }
modifiedjs-packages/playgrounds/unique.dev.tsdiffbeforeafterboth
--- a/js-packages/playgrounds/unique.dev.ts
+++ b/js-packages/playgrounds/unique.dev.ts
@@ -696,7 +696,7 @@
       const recipient = this.helper.util.fromSeed(mnemonicGenerate(), ss58Format);
       accounts.push(recipient);
       if(balance !== 0n) {
-        const tx = this.helper.constructApiCall('api.tx.balances.transfer', [{Id: recipient.address}, balance * tokenNominal]);
+        const tx = this.helper.constructApiCall('api.tx.balances.transferKeepAlive', [{Id: recipient.address}, balance * tokenNominal]);
         transactions.push(this.helper.signTransaction(donor, tx, {nonce}, 'account generation'));
         nonce++;
       }
@@ -749,7 +749,7 @@
         const recipient = this.helper.util.fromSeed(mnemonicGenerate(), ss58Format);
         accounts.push(recipient);
         if(withBalance !== 0n) {
-          const tx = this.helper.constructApiCall('api.tx.balances.transfer', [{Id: recipient.address}, withBalance * tokenNominal]);
+          const tx = this.helper.constructApiCall('api.tx.balances.transferKeepAlive', [{Id: recipient.address}, withBalance * tokenNominal]);
           transactions.push(this.helper.signTransaction(donor, tx, {nonce}, 'account generation'));
           nonce++;
         }
modifiedjs-packages/playgrounds/unique.tsdiffbeforeafterboth
--- a/js-packages/playgrounds/unique.ts
+++ b/js-packages/playgrounds/unique.ts
@@ -2391,7 +2391,7 @@
    * @returns ```true``` if extrinsic success, otherwise ```false```
    */
   async transferToSubstrate(signer: TSigner, address: TSubstrateAccount, amount: bigint | string): Promise<boolean> {
-    const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transfer', [address, amount], true/*, `Unable to transfer balance from ${this.helper.getSignerAddress(signer)} to ${address}`*/);
+    const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transferKeepAlive', [address, amount], true/*, `Unable to transfer balance from ${this.helper.getSignerAddress(signer)} to ${address}`*/);
 
     let transfer = {from: null, to: null, amount: 0n} as any;
     result.result.events.forEach(({event: {data, method, section}}: any) => {
@@ -2458,7 +2458,7 @@
    * @returns ```true``` if extrinsic success, otherwise ```false```
    */
   async transferToEthereum(signer: TSigner, address: TEthereumAccount, amount: bigint | string): Promise<boolean> {
-    const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transfer', [address, amount], true);
+    const result = await this.helper.executeExtrinsic(signer, 'api.tx.balances.transferKeepAlive', [address, amount], true);
 
     let transfer = {from: null, to: null, amount: 0n} as any;
     result.result.events.forEach(({event: {data, method, section}}: any) => {
deletedjs-packages/tests/check-event/burnItemEvent.test.tsdiffbeforeafterboth
--- a/js-packages/tests/check-event/burnItemEvent.test.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-// 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/>.
-
-// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from '../util/index.js';
-import type {IEvent} from '@unique/playgrounds/types.js';
-
-
-describe('Burn Item event ', () => {
-  let alice: IKeyringPair;
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([10n], donor);
-    });
-  });
-  itSub('Check event from burnItem(): ', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
-    const token = await collection.mintToken(alice, {Substrate: alice.address});
-    await token.burn(alice);
-    await helper.wait.newBlocks(1);
-
-    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
-    const eventStrings = event.map(e => `${e.section}.${e.method}`);
-
-    expect(eventStrings).to.contains('common.ItemDestroyed');
-    expect(eventStrings).to.contains('treasury.Deposit');
-    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
-  });
-});
deletedjs-packages/tests/check-event/createCollectionEvent.test.tsdiffbeforeafterboth
--- a/js-packages/tests/check-event/createCollectionEvent.test.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-// 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/>.
-
-// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect} from '../util/index.js';
-import type {IEvent} from '@unique/playgrounds/types.js';
-
-describe('Create collection event ', () => {
-  let alice: IKeyringPair;
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([10n], donor);
-    });
-  });
-  itSub('Check event from createCollection(): ', async ({helper}) => {
-    await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
-    await helper.wait.newBlocks(1);
-    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
-    const eventStrings = event.map(e => `${e.section}.${e.method}`);
-
-    expect(eventStrings).to.contains('common.CollectionCreated');
-    expect(eventStrings).to.contains('treasury.Deposit');
-    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
-  });
-});
deletedjs-packages/tests/check-event/createItemEvent.test.tsdiffbeforeafterboth
--- a/js-packages/tests/check-event/createItemEvent.test.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-// 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/>.
-
-// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import type {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from '../util/index.js';
-import type {IEvent} from '@unique/playgrounds/types.js';
-
-describe('Create Item event ', () => {
-  let alice: IKeyringPair;
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([10n], donor);
-    });
-  });
-  itSub('Check event from createItem(): ', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
-    await collection.mintToken(alice, {Substrate: alice.address});
-    await helper.wait.newBlocks(1);
-    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
-    const eventStrings = event.map(e => `${e.section}.${e.method}`);
-
-    expect(eventStrings).to.contains('common.ItemCreated');
-    expect(eventStrings).to.contains('treasury.Deposit');
-    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
-  });
-});
deletedjs-packages/tests/check-event/createMultipleItemsEvent.test.tsdiffbeforeafterboth
--- a/js-packages/tests/check-event/createMultipleItemsEvent.test.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-// 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/>.
-
-// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect} from '../util/index.js';
-import type {IEvent} from '@unique/playgrounds/types.js';
-
-describe('Create Multiple Items Event event ', () => {
-  let alice: IKeyringPair;
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([10n], donor);
-    });
-  });
-  itSub('Check event from createMultipleItems(): ', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
-
-    await collection.mintMultipleTokens(alice, [
-      {owner: {Substrate: alice.address}},
-      {owner: {Substrate: alice.address}},
-    ]);
-
-    await helper.wait.newBlocks(1);
-    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
-    const eventStrings = event.map(e => `${e.section}.${e.method}`);
-
-    expect(eventStrings).to.contains('common.ItemCreated');
-    expect(eventStrings).to.contains('treasury.Deposit');
-    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
-  });
-});
deletedjs-packages/tests/check-event/destroyCollectionEvent.test.tsdiffbeforeafterboth
--- a/js-packages/tests/check-event/destroyCollectionEvent.test.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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/>.
-
-// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import type {IKeyringPair} from '@polkadot/types/types';
-import {itSub, usingPlaygrounds, expect} from '../util/index.js';
-import type {IEvent} from '@unique/playgrounds/types.js';
-
-describe('Destroy collection event ', () => {
-  let alice: IKeyringPair;
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([10n], donor);
-    });
-  });
-
-  itSub('Check event from destroyCollection(): ', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
-    await collection.burn(alice);
-    await helper.wait.newBlocks(1);
-    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
-    const eventStrings = event.map(e => `${e.section}.${e.method}`);
-
-    expect(eventStrings).to.contains('common.CollectionDestroyed');
-    expect(eventStrings).to.contains('treasury.Deposit');
-    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
-  });
-});
deletedjs-packages/tests/check-event/transferEvent.test.tsdiffbeforeafterboth
--- a/js-packages/tests/check-event/transferEvent.test.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-// 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/>.
-
-// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from '../util/index.js';
-import type {IEvent} from '@unique/playgrounds/types.js';
-
-describe('Transfer event ', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
-    });
-  });
-
-  itSub('Check event from transfer(): ', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
-    const token = await collection.mintToken(alice, {Substrate: alice.address});
-    await token.transfer(alice, {Substrate: bob.address});
-    await helper.wait.newBlocks(1);
-    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
-    const eventStrings = event.map(e => `${e.section}.${e.method}`);
-
-    expect(eventStrings).to.contains('common.Transfer');
-    expect(eventStrings).to.contains('treasury.Deposit');
-    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
-  });
-});
deletedjs-packages/tests/check-event/transferFromEvent.test.tsdiffbeforeafterboth
--- a/js-packages/tests/check-event/transferFromEvent.test.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-// 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/>.
-
-// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub} from '../util/index.js';
-import type {IEvent} from '@unique/playgrounds/types.js';
-
-describe('Transfer event ', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
-    });
-  });
-
-  itSub('Check event from transfer(): ', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
-    const token = await collection.mintToken(alice, {Substrate: alice.address});
-    await token.transferFrom(alice, {Substrate: alice.address}, {Substrate: bob.address});
-    await helper.wait.newBlocks(1);
-    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
-    const eventStrings = event.map(e => `${e.section}.${e.method}`);
-
-    expect(eventStrings).to.contains('common.Transfer');
-    expect(eventStrings).to.contains('treasury.Deposit');
-    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
-  });
-});
deletedjs-packages/tests/collator-selection/collatorSelection.seqtest.tsdiffbeforeafterboth
--- a/js-packages/tests/collator-selection/collatorSelection.seqtest.ts
+++ /dev/null
@@ -1,423 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../util/index.js';
-
-async function nodeAddress(name: string) {
-  // eslint-disable-next-line require-await
-  return await usingPlaygrounds(async (helper) => {
-    const envNodeStash = `RELAY_UNIQUE_NODE_${name.toUpperCase()}_STASH`;
-
-    const nodeStash = process.env[envNodeStash];
-    if(nodeStash) {
-      return helper.address.normalizeSubstrateToChainFormat(nodeStash);
-    } else {
-      throw Error(`"${envNodeStash}" env var is not set`);
-    }
-  });
-}
-
-async function getInitialInvulnerables() {
-  return await Promise.all([
-    nodeAddress('alpha'),
-    nodeAddress('beta'),
-    nodeAddress('gamma'),
-    nodeAddress('delta'),
-  ]);
-}
-
-async function resetInvulnerables() {
-  await usingPlaygrounds(async (helper, privateKey) => {
-    const superuser = await privateKey('//Alice');
-    const initialInvulnerables = await getInitialInvulnerables();
-
-    const invulnerables = await helper.collatorSelection.getInvulnerables();
-
-    // Remove all invulnerables but the first one
-    const firstInvulnerable = invulnerables[0];
-
-    let nonce = await helper.chain.getNonce(superuser.address);
-    await Promise.all(invulnerables.slice(1).map(invulnerable => helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [invulnerable], true, {nonce: nonce++})));
-
-    // Add the initial invulnerables
-    await Promise.all(initialInvulnerables.map(invulnerable => helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [invulnerable], true, {nonce: nonce++})));
-
-    // Remove the first invulnerable if it's not an initial one
-    if(!initialInvulnerables.includes(firstInvulnerable)) {
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [firstInvulnerable]);
-    }
-  });
-}
-
-// todo:collator Most preferable to launch this test in parallel somehow -- or change the session period (1 hr).
-describe('Integration Test: Collator Selection', () => {
-  let superuser: IKeyringPair;
-  let previousLicenseBond = 0n;
-  let licenseBond = 0n;
-
-  before(async function() {
-    if(!process.env.RUN_COLLATOR_TESTS) this.skip();
-
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.CollatorSelection]);
-      superuser = await privateKey('//Alice');
-
-      previousLicenseBond = await helper.collatorSelection.getLicenseBond();
-      licenseBond = 10n * helper.balance.getOneTokenNominal();
-      await helper.getSudo().collatorSelection.setLicenseBond(superuser, licenseBond);
-    });
-  });
-
-  describe('Dynamic shuffling of collators', () => {
-    // These two are the default invulnerables, and should return to be invulnerables after this suite.
-    let alphaNode: string;
-    let betaNode: string;
-
-    let gammaNode: string;
-    let deltaNode: string;
-
-    before(async function() {
-      await usingPlaygrounds(async (helper) => {
-        // todo:collator see again if blocks start to be finalized in dev mode
-        // Skip the collator block production in dev mode, since the blocks are sealed automatically.
-        if(await helper.arrange.isDevNode()) this.skip();
-
-        [alphaNode, betaNode, gammaNode, deltaNode] = await getInitialInvulnerables();
-
-        const invulnerables = await helper.collatorSelection.getInvulnerables();
-        expect(invulnerables.length, 'Invalid initial invulnerables number').to.be.equal(4);
-        expect(invulnerables, 'Invalid initial invulnerables').containSubset([alphaNode, betaNode, gammaNode, deltaNode]);
-      });
-    });
-
-    itSub('Change invulnerables and make sure they start producing blocks', async ({helper}) => {
-      let nonce = await helper.chain.getNonce(superuser.address);
-
-      nonce = await helper.chain.getNonce(superuser.address);
-      await expect(Promise.all([
-        helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [alphaNode], true, {nonce: nonce++}),
-        helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [betaNode], true, {nonce: nonce++}),
-      ])).to.be.fulfilled;
-
-      const newInvulnerables = await helper.collatorSelection.getInvulnerables();
-      expect(newInvulnerables).to.contain(gammaNode).and.contain(deltaNode).and.be.length(2);
-
-      await helper.wait.newSessions(2);
-
-      const newValidators = await helper.callRpc('api.query.session.validators');
-      expect(newValidators).to.contain(gammaNode).and.contain(deltaNode).and.be.length(2);
-
-      const lastBlockNumber = await helper.chain.getLatestBlockNumber();
-      await helper.wait.newBlocks(1);
-      const lastGammaBlock = (await helper.callRpc('api.query.collatorSelection.lastAuthoredBlock', [gammaNode])).toNumber();
-      const lastDeltaBlock = (await helper.callRpc('api.query.collatorSelection.lastAuthoredBlock', [deltaNode])).toNumber();
-      expect(lastGammaBlock >= lastBlockNumber || lastDeltaBlock >= lastBlockNumber).to.be.true;
-    });
-
-    after(async () => {
-      await resetInvulnerables();
-    });
-  });
-
-  describe('Getting and releasing licenses to collate', () => {
-    let crowd: IKeyringPair[];
-
-    before(async function() {
-      await usingPlaygrounds(async (helper) => {
-        crowd = await helper.arrange.createCrowd(20, 100n, superuser);
-
-        // set session keys for everyone
-        await Promise.all(crowd.map(acc => helper.session.setOwnKeysFromAddress(acc)));
-      });
-    });
-
-    describe('Positive', () => {
-      itSub('Can lease and release a license', async ({helper}) => {
-        const account = crowd.pop()!;
-
-        // make sure it does not have any reserved funds
-        expect((await helper.balance.getSubstrateFull(account.address)).reserved).to.be.equal(0n);
-
-        // getting a license reserves a license bond cost
-        await helper.collatorSelection.obtainLicense(account);
-        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(licenseBond);
-        expect((await helper.balance.getSubstrateFull(account.address)).reserved).to.be.equal(licenseBond);
-
-        // releasing a license un-reserves the license bond cost
-        await helper.collatorSelection.releaseLicense(account);
-        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(0n);
-
-        const balance = await helper.balance.getSubstrateFull(account.address);
-        expect(balance.reserved).to.be.equal(0n);
-        expect(balance.free > 100n - licenseBond);
-      });
-
-      itSub('Can force revoke a license', async ({helper}) => {
-        const account = crowd.pop()!;
-
-        // getting a license reserves a license bond cost
-        const previousBalance = await helper.balance.getSubstrateFull(account.address);
-        await helper.collatorSelection.obtainLicense(account);
-        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(licenseBond);
-
-        // force-releasing a license un-reserves the license bond cost as well
-        await helper.getSudo().collatorSelection.forceReleaseLicense(superuser, account.address);
-        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(previousBalance.reserved);
-
-        const balance = await helper.balance.getSubstrateFull(account.address);
-        expect(balance.reserved).to.be.equal(previousBalance.reserved);
-        expect(balance.free > previousBalance.free - licenseBond);
-      });
-    });
-
-    describe('Negative', () => {
-      itSub('Cannot get a license without session keys set', async ({helper}) => {
-        const [account] = await helper.arrange.createAccounts([100n], superuser);
-        await expect(helper.collatorSelection.obtainLicense(account))
-          .to.be.rejectedWith(/collatorSelection.ValidatorNotRegistered/);
-      });
-
-      itSub('Cannot register a license twice', async ({helper}) => {
-        const account = crowd.pop()!;
-        await helper.collatorSelection.obtainLicense(account);
-        await expect(helper.collatorSelection.obtainLicense(account))
-          .to.be.rejectedWith(/collatorSelection.AlreadyHoldingLicense/);
-      });
-
-      itSub('Cannot release a license twice', async ({helper}) => {
-        const account = crowd.pop()!;
-        await helper.collatorSelection.obtainLicense(account);
-        await helper.collatorSelection.releaseLicense(account);
-        await expect(helper.collatorSelection.releaseLicense(account))
-          .to.be.rejectedWith(/collatorSelection.NoLicense/);
-      });
-
-      itSub('Cannot force revoke a license as non-sudo', async ({helper}) => {
-        const account = crowd.pop()!;
-        await helper.collatorSelection.obtainLicense(account);
-        await expect(helper.collatorSelection.forceReleaseLicense(superuser, account.address))
-          .to.be.rejectedWith(/BadOrigin/);
-      });
-    });
-  });
-
-  describe('Onboarding, collating, and offboarding as collator candidates', () => {
-    let crowd: IKeyringPair[];
-
-    before(async function() {
-      await usingPlaygrounds(async (helper) => {
-        crowd = await helper.arrange.createCrowd(20, 100n, superuser);
-
-        // set session keys for everyone
-        await Promise.all(crowd.map(acc => helper.session.setOwnKeysFromAddress(acc)));
-      });
-    });
-
-    describe('Positive', () => {
-      itSub('Can onboard and offboard repeatedly', async ({helper}) => {
-        const account = crowd.pop()!;
-        await helper.collatorSelection.obtainLicense(account);
-        await helper.collatorSelection.onboard(account);
-        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([account.address]);
-
-        await helper.collatorSelection.offboard(account);
-        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([]);
-
-        await helper.collatorSelection.onboard(account);
-        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([account.address]);
-
-        await helper.collatorSelection.offboard(account);
-        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([]);
-      });
-
-      itSub('Penalizes and forfeits license from faulty collators', async ({helper}) => {
-        // This one shouldn't even be able to produce blocks.
-        const account = crowd.pop()!;
-        await helper.collatorSelection.obtainLicense(account);
-        await helper.collatorSelection.onboard(account);
-        expect(await helper.collatorSelection.getCandidates()).to.contain(account.address);
-
-        // Wait for 3 new sessions before checking that the collator will be kicked:
-        // one to get collator onboarded, and another two for the collator to fail
-        await helper.wait.newSessions(3);
-
-        expect(await helper.collatorSelection.getCandidates()).to.not.contain(account.address);
-        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(0n);
-
-        // The account's reserved funds get slashed as a penalty
-        const balance = await helper.balance.getSubstrateFull(account.address);
-        expect(balance.reserved).to.be.equal(0n);
-        expect(balance.free < 100n - licenseBond);
-      });
-    });
-
-    describe('Negative', () => {
-      itSub('Cannot onboard without a license', async ({helper}) => {
-        const account = crowd.pop()!;
-        await expect(helper.collatorSelection.onboard(account))
-          .to.be.rejectedWith(/collatorSelection.NoLicense/);
-      });
-
-      itSub('Cannot offboard without a license', async ({helper}) => {
-        const account = crowd.pop()!;
-        await expect(helper.collatorSelection.offboard(account))
-          .to.be.rejectedWith(/collatorSelection.NotCandidate/);
-      });
-
-      itSub('Cannot offboard while not onboarded', async ({helper}) => {
-        const account = crowd.pop()!;
-        await helper.collatorSelection.obtainLicense(account);
-        await expect(helper.collatorSelection.offboard(account))
-          .to.be.rejectedWith(/collatorSelection.NotCandidate/);
-      });
-
-      itSub('Cannot onboard while already onboarded', async ({helper}) => {
-        const account = crowd.pop()!;
-        await helper.collatorSelection.obtainLicense(account);
-        await helper.collatorSelection.onboard(account);
-        await expect(helper.collatorSelection.onboard(account))
-          .to.be.rejectedWith(/collatorSelection.AlreadyCandidate/);
-      });
-    });
-  });
-
-  describe('Addition and removal of invulnerables', () => {
-    describe('Positive', () => {
-      itSub('Adds an invulnerable', async ({helper}) => {
-        const [account] = await helper.arrange.createAccounts([10n], superuser);
-        const invulnerables = await helper.collatorSelection.getInvulnerables();
-
-        await helper.session.setOwnKeysFromAddress(account);
-        await helper.getSudo().collatorSelection.addInvulnerable(superuser, account.address);
-
-        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
-        expect(invulnerables.concat(account.address)).to.have.all.members(newInvulnerables);
-      });
-
-      itSub('Removes an invulnerable', async ({helper}) => {
-        const invulnerables = await helper.collatorSelection.getInvulnerables();
-        const lastInvulnerable = invulnerables.pop()!;
-
-        await helper.getSudo().collatorSelection.removeInvulnerable(superuser, lastInvulnerable);
-        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
-        // invulnerables had its last element removed, so they should be equal
-        expect(newInvulnerables).to.have.all.members(invulnerables);
-      });
-    });
-
-    describe('Negative', () => {
-      itSub('Does not duplicate an invulnerable', async ({helper}) => {
-        const invulnerables = await helper.collatorSelection.getInvulnerables();
-        // adding an already invulnerable should not fail, but should not duplicate it either
-        await expect(helper.getSudo().collatorSelection.addInvulnerable(superuser, invulnerables[0]))
-          .to.be.fulfilled;
-        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
-        expect(newInvulnerables).to.have.all.members(invulnerables);
-      });
-
-      itSub('Cannot remove a non-existent invulnerable', async ({helper}) => {
-        const [account] = await helper.arrange.createAccounts([0n], superuser);
-        await expect(helper.getSudo().collatorSelection.removeInvulnerable(superuser, account.address))
-          .to.be.rejectedWith(/collatorSelection.NotInvulnerable/);
-      });
-
-      itSub('Cannot allow invulnerables to be empty', async ({helper}) => {
-        const invulnerables = await helper.collatorSelection.getInvulnerables();
-        const lastInvulnerable = invulnerables.pop()!;
-
-        let nonce = await helper.chain.getNonce(superuser.address);
-        await Promise.all(invulnerables.map((i: any) =>
-          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [i], true, {nonce: nonce++})));
-
-        await expect(helper.getSudo().collatorSelection.removeInvulnerable(superuser, lastInvulnerable))
-          .to.be.rejectedWith(/collatorSelection.TooFewInvulnerables/);
-
-        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
-        expect(newInvulnerables).to.be.deep.equal([lastInvulnerable]);
-
-        // restore the invulnerables to the previous state
-        nonce = await helper.chain.getNonce(superuser.address);
-        await Promise.all(invulnerables.map((i: any) =>
-          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [i], true, {nonce: nonce++})));
-      });
-
-      itSub('Cannot have too many invulnerables', async ({helper}) => {
-        // todo:collator make sure that there is enough session time for a set of tests
-        // 28 non-functioning collators, teehee.
-
-        const invulnerablesLength = (await helper.collatorSelection.getInvulnerables()).length;
-        const invulnerablesUntilLimit = (await helper.collatorSelection.getDesiredCollators()) - invulnerablesLength;
-        const newInvulnerables = await helper.arrange.createAccounts(Array(invulnerablesUntilLimit).fill(10n), superuser);
-        const [lastInvulnerable] = await helper.arrange.createAccounts([10n], superuser);
-
-        await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
-          helper.session.setOwnKeysFromAddress(i)));
-        await helper.session.setOwnKeysFromAddress(lastInvulnerable);
-
-        let nonce = await helper.chain.getNonce(superuser.address);
-        await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
-          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [i.address], true, {nonce: nonce++})));
-
-        await expect(helper.getSudo().collatorSelection.addInvulnerable(superuser, lastInvulnerable.address))
-          .to.be.rejectedWith(/collatorSelection.TooManyInvulnerables/);
-
-        // restore the invulnerables to the previous state
-        nonce = await helper.chain.getNonce(superuser.address);
-        await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
-          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [i.address], true, {nonce: nonce++})));
-      });
-
-      itSub('Forbids a non-sudo to add an invulnerable', async ({helper}) => {
-        const [account] = await helper.arrange.createAccounts([10n], superuser);
-        const invulnerables = await helper.collatorSelection.getInvulnerables();
-
-        await helper.session.setOwnKeysFromAddress(account);
-        await expect(helper.collatorSelection.addInvulnerable(superuser, account.address))
-          .to.be.rejectedWith(/BadOrigin/);
-
-        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
-        expect(newInvulnerables).to.be.members(invulnerables);
-      });
-
-      itSub('Forbids a non-sudo to remove an invulnerable', async ({helper}) => {
-        const invulnerables = await helper.collatorSelection.getInvulnerables();
-        await expect(helper.collatorSelection.removeInvulnerable(superuser, invulnerables[0]))
-          .to.be.rejectedWith(/BadOrigin/);
-        expect(await helper.collatorSelection.getInvulnerables()).to.have.all.members(invulnerables);
-      });
-
-      after(async function() {
-        await resetInvulnerables();
-      });
-    });
-  });
-
-  after(async function() {
-    if(!process.env.RUN_COLLATOR_TESTS) return;
-
-    await usingPlaygrounds(async (helper) => {
-      if(helper.fetchMissingPalletNames([Pallets.CollatorSelection]).length != 0) return;
-
-      await helper.getSudo().collatorSelection.setLicenseBond(superuser, previousLicenseBond);
-
-      const candidates = await helper.collatorSelection.getCandidates();
-      let nonce = await helper.chain.getNonce(superuser.address);
-      await Promise.all(candidates.map(candidate =>
-        helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.forceReleaseLicense', [candidate], true, {nonce: nonce++})));
-    });
-  });
-});
deletedjs-packages/tests/collator-selection/identity.seqtest.tsdiffbeforeafterboth
--- a/js-packages/tests/collator-selection/identity.seqtest.ts
+++ /dev/null
@@ -1,284 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../util/index.js';
-import {UniqueHelper} from '@unique/playgrounds/unique.js';
-
-async function getIdentities(helper: UniqueHelper) {
-  const identities: [string, any][] = [];
-  for(const [key, value] of await helper.getApi().query.identity.identityOf.entries())
-    identities.push([(key as any).toHuman(), (value as any).unwrap()]);
-  return identities;
-}
-
-async function getIdentityAccounts(helper: UniqueHelper) {
-  return (await getIdentities(helper)).flatMap(([key, _value]) => key);
-}
-
-async function getSubIdentityAccounts(helper: UniqueHelper, address: string) {
-  return ((await helper.getApi().query.identity.subsOf(address)).toHuman() as any)[1];
-}
-
-async function getSubIdentityName(helper: UniqueHelper, address: string) {
-  return ((await helper.getApi().query.identity.superOf(address)).toHuman() as any);
-}
-
-describe('Integration Test: Identities Manipulation', () => {
-  let superuser: IKeyringPair;
-
-  before(async function() {
-    if(!process.env.RUN_COLLATOR_TESTS) this.skip();
-
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.Identity]);
-      superuser = await privateKey('//Alice');
-    });
-  });
-
-  itSub('Normal calls do not work', async ({helper}) => {
-    // console.error = () => {};
-    await expect(helper.executeExtrinsic(superuser, 'api.tx.identity.setIdentity', [{info: {display: {Raw: 'Meowser'}}}] as any))
-      .to.be.rejectedWith(/Transaction call is not expected/);
-  });
-
-  describe('Identities', () => {
-    itSub('Sets identities', async ({helper}) => {
-      const oldIdentitiesCount = (await getIdentityAccounts(helper)).length;
-
-      const crowdSize = 10;
-      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
-      const identities = crowd.map((acc, i) => [acc.address, {info: {display: {Raw: `accounter #${i}`}}}]);
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
-
-      expect((await getIdentityAccounts(helper)).length).to.be.equal(oldIdentitiesCount + crowdSize);
-    });
-
-    itSub('Setting identities does not delete existing but does overwrite', async ({helper}) => {
-      const crowd = await helper.arrange.createCrowd(10, 0n, superuser);
-      const identities = crowd.map((acc, i) => [acc.address, {info: {display: {Raw: `accounter #${i}`}}}]);
-
-      // insert a single identity
-      let singleIdentity = identities.pop()!;
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [[singleIdentity]] as any);
-
-      const oldIdentitiesCount = (await getIdentityAccounts(helper)).length;
-
-      // change an identity and push it with a few new others
-      singleIdentity = [singleIdentity[0], {info: {display: {Raw: 'something special'}}}];
-      identities.push(singleIdentity);
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
-
-      // oldIdentitiesCount + 9 because one identity is overwritten, not inserted on top
-      expect((await getIdentityAccounts(helper)).length).to.be.equal(oldIdentitiesCount + 9);
-      expect((await helper.callRpc('api.query.identity.identityOf', [singleIdentity[0]])).toHuman().info.display)
-        .to.be.deep.equal({Raw: 'something special'});
-    });
-
-    itSub('Removes identities', async ({helper}) => {
-      const crowd = await helper.arrange.createCrowd(10, 0n, superuser);
-      const identities = crowd.map((acc, i) => [acc.address, {info: {display: {Raw: `accounter #${i}`}}}]);
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
-      const oldIdentities = await getIdentityAccounts(helper);
-
-      // delete a couple, check that they are no longer there
-      const scapegoats = [crowd.pop()!.address, crowd.pop()!.address];
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceRemoveIdentities', [scapegoats]);
-      const newIdentities = await getIdentityAccounts(helper);
-      expect(newIdentities.concat(scapegoats)).to.be.have.members(oldIdentities);
-    });
-  });
-
-  describe('Sub-identities', () => {
-    itSub('Sets subs', async ({helper}) => {
-      const crowdSize = 18;
-      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
-      const supers = [crowd.pop()!, crowd.pop()!, crowd.pop()!];
-
-      const subsPerSup = crowd.length / supers.length;
-      let subCount = 0;
-      const subs = [
-        crowd.slice(subCount, subCount += subsPerSup + 1),
-        crowd.slice(subCount, subCount += subsPerSup),
-        crowd.slice(subCount, subCount += subsPerSup - 1),
-      ];
-
-      const subsInfo = supers.map((acc, i) => [
-        acc.address, [
-          1000000n + BigInt(i + 1),
-          subs[i].map((sub, j) => [
-            sub.address, {Raw: `accounter #${j}`},
-          ]),
-        ],
-      ]);
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo] as any);
-
-      for(let i = 0; i < supers.length; i++) {
-        // check deposit
-        expect(((await helper.getApi().query.identity.subsOf(supers[i].address)).toJSON() as any)[0]).to.be.equal(1000001 + i);
-
-        const subsAccounts = await getSubIdentityAccounts(helper, supers[i].address);
-        // check sub-identities as account ids
-        expect(subsAccounts).to.include.members(subs[i].map(x => x.address));
-
-        for(let j = 0; j < subsAccounts.length; j++) {
-          // check sub-identities' names
-          expect((await getSubIdentityName(helper, subsAccounts[j]))[1]).to.be.deep.equal({Raw: `accounter #${j}`});
-        }
-      }
-    });
-
-    itSub('Setting sub-identities does not delete other existing but does overwrite own', async ({helper}) => {
-      const crowdSize = 18;
-      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
-      const supers = [crowd.pop()!, crowd.pop()!, crowd.pop()!];
-
-      const subsPerSup = crowd.length / supers.length;
-      let subCount = 0;
-      const subs = [
-        crowd.slice(subCount, subCount += subsPerSup + 1),
-        crowd.slice(subCount, subCount += subsPerSup),
-        crowd.slice(subCount, subCount += subsPerSup - 1),
-      ];
-
-      const subsInfo1 = supers.map((acc, i) => [
-        acc.address, [
-          1000000n + BigInt(i + 1),
-          subs[i].map((sub, j) => [
-            sub.address, {Raw: `accounter #${j}`},
-          ]),
-        ],
-      ]);
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo1] as any);
-
-      // change some sub-identities...
-      subs[2].pop(); subs[2].pop(); subs[2].push(...await helper.arrange.createAccounts([0n], superuser));
-
-      // ...and set them
-      const subsInfo2 = [[
-        supers[2].address, [
-          999999n,
-          subs[2].map((sub, j) => [
-            sub.address, {Raw: `discounter #${j}`},
-          ]),
-        ],
-      ]];
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo2] as any);
-
-      // make sure everything else is the same
-      for(let i = 0; i < supers.length - 1; i++) {
-        // check deposit
-        expect(((await helper.getApi().query.identity.subsOf(supers[i].address)).toJSON() as any)[0]).to.be.equal(1000001 + i);
-
-        const subsAccounts = await getSubIdentityAccounts(helper, supers[i].address);
-        // check sub-identities as account ids
-        expect(subsAccounts).to.include.members(subs[i].map(x => x.address));
-
-        for(let j = 0; j < subsAccounts; j++) {
-          // check sub-identities' names
-          expect((await getSubIdentityName(helper, subsAccounts[j]))[1]).to.be.deep.equal({Raw: `accounter #${j}`});
-        }
-      }
-
-      // check deposit
-      expect(((await helper.getApi().query.identity.subsOf(supers[2].address)).toJSON() as any)[0]).to.be.equal(999999);
-
-      const subsAccounts = await getSubIdentityAccounts(helper, supers[2].address);
-      // check sub-identities as account ids
-      expect(subsAccounts).to.include.members(subs[2].map(x => x.address));
-
-      for(let j = 0; j < subsAccounts.length; j++) {
-        // check sub-identities' names
-        expect((await getSubIdentityName(helper, subsAccounts[j]))[1]).to.be.deep.equal({Raw: `discounter #${j}`});
-      }
-    });
-
-    itSub('Removes sub-identities', async ({helper}) => {
-      const crowdSize = 3;
-      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
-      const sup = crowd.pop()!;
-
-      const subsInfo1 = [[
-        sup.address, [
-          1000000n,
-          crowd.map((sub, j) => [
-            sub.address, {Raw: `accounter #${j}`},
-          ]),
-        ],
-      ]];
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo1] as any);
-
-      // empty sub-identities should delete the records
-      const subsInfo2 = [[
-        sup.address, [
-          1000000n,
-          [],
-        ],
-      ]];
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo2] as any);
-
-      // check deposit
-      expect((await helper.getApi().query.identity.subsOf(sup.address)).toHuman()).to.be.deep.equal(['0', []]);
-
-      for(let j = 0; j < crowd.length; j++) {
-        // check sub-identities' names
-        expect((await getSubIdentityName(helper, crowd[j].address))).to.be.null;
-      }
-    });
-
-    itSub('Removing identities deletes associated sub-identities', async ({helper}) => {
-      const crowd = await helper.arrange.createCrowd(3, 0n, superuser);
-      const sup = crowd.pop()!;
-
-      // insert identity
-      const identities = [[sup.address, {info: {display: {Raw: 'mental'}}}]];
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
-
-      // and its sub-identities
-      const subsInfo = [[
-        sup.address, [
-          1000000n,
-          crowd.map((sub, j) => [
-            sub.address, {Raw: `accounter #${j}`},
-          ]),
-        ],
-      ]];
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo] as any);
-
-      // delete top identity
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceRemoveIdentities', [[sup.address]]);
-
-      // check that sub-identities are deleted
-      expect((await helper.getApi().query.identity.subsOf(sup.address)).toHuman()).to.be.deep.equal(['0', []]);
-
-      for(let j = 0; j < crowd.length; j++) {
-        // check sub-identities' names
-        expect((await getSubIdentityName(helper, crowd[j].address))).to.be.null;
-      }
-    });
-  });
-
-  after(async function() {
-    if(!process.env.RUN_COLLATOR_TESTS) return;
-
-    await usingPlaygrounds(async helper => {
-      if(helper.fetchMissingPalletNames([Pallets.Identity]).length != 0) return;
-
-      const identitiesToRemove: string[] = await getIdentityAccounts(helper);
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceRemoveIdentities', [identitiesToRemove]);
-    });
-  });
-});
modifiedjs-packages/tests/eth/marketplace-v2/marketplace.test.tsdiffbeforeafterboth
--- a/js-packages/tests/eth/marketplace-v2/marketplace.test.ts
+++ b/js-packages/tests/eth/marketplace-v2/marketplace.test.ts
@@ -40,6 +40,8 @@
   });
 
   async function deployMarket(helper: EthUniqueHelper, marketOwner: string) {
+    const nodeModulesDir = `${dirname}/../../../node_modules`;
+    const solApiDir = `${dirname}/../api`;
     return await helper.ethContract.deployByCode(
       marketOwner,
       'Market',
@@ -47,39 +49,39 @@
       [
         {
           solPath: '@unique-nft/solidity-interfaces/contracts/UniqueNFT.sol',
-          fsPath: `${dirname}/../api/UniqueNFT.sol`,
+          fsPath: `${solApiDir}/UniqueNFT.sol`,
         },
         {
           solPath: '@unique-nft/solidity-interfaces/contracts/UniqueFungible.sol',
-          fsPath: `${dirname}/../api/UniqueFungible.sol`,
+          fsPath: `${solApiDir}/UniqueFungible.sol`,
         },
         {
           solPath: '@openzeppelin/contracts/utils/introspection/IERC165.sol',
-          fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/introspection/IERC165.sol`,
+          fsPath: `${nodeModulesDir}/@openzeppelin/contracts/utils/introspection/IERC165.sol`,
         },
         {
           solPath: '@openzeppelin/contracts/access/Ownable.sol',
-          fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/access/Ownable.sol`,
+          fsPath: `${nodeModulesDir}/@openzeppelin/contracts/access/Ownable.sol`,
         },
         {
           solPath: '@openzeppelin/contracts/utils/Context.sol',
-          fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/Context.sol`,
+          fsPath: `${nodeModulesDir}/@openzeppelin/contracts/utils/Context.sol`,
         },
         {
           solPath: '@openzeppelin/contracts/security/ReentrancyGuard.sol',
-          fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/security/ReentrancyGuard.sol`,
+          fsPath: `${nodeModulesDir}/@openzeppelin/contracts/security/ReentrancyGuard.sol`,
         },
         {
           solPath: '@openzeppelin/contracts/utils/introspection/ERC165Checker.sol',
-          fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol`,
+          fsPath: `${nodeModulesDir}/@openzeppelin/contracts/utils/introspection/ERC165Checker.sol`,
         },
         {
           solPath: '@openzeppelin/contracts/token/ERC721/IERC721.sol',
-          fsPath: `${dirname}/../../../../node_modules/@openzeppelin/contracts/token/ERC721/IERC721.sol`,
+          fsPath: `${nodeModulesDir}/@openzeppelin/contracts/token/ERC721/IERC721.sol`,
         },
         {
           solPath: '@unique-nft/solidity-interfaces/contracts/CollectionHelpers.sol',
-          fsPath: `${dirname}/../api/CollectionHelpers.sol`,
+          fsPath: `${solApiDir}/CollectionHelpers.sol`,
         },
         {
           solPath: 'royalty/UniqueRoyaltyHelper.sol',
deletedjs-packages/tests/governance/council.test.tsdiffbeforeafterboth
--- a/js-packages/tests/governance/council.test.ts
+++ /dev/null
@@ -1,457 +0,0 @@
-
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
-import {Event} from '@unique/playgrounds/unique.dev.js';
-import {initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyEnactmentPeriod, councilMotionDuration, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, initTechComm, clearFellowship, dummyProposal, dummyProposalCall, initFellowship, defaultEnactmentMoment, fellowshipPropositionOrigin} from './util.js';
-import type {ICounselors} from './util.js';
-
-describeGov('Governance: Council tests', () => {
-  let donor: IKeyringPair;
-  let counselors: ICounselors;
-  let sudoer: IKeyringPair;
-
-  const moreThanHalfCouncilThreshold = 3;
-
-  before(async function() {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.Council]);
-
-      donor = await privateKey({url: import.meta.url});
-      sudoer = await privateKey('//Alice');
-    });
-  });
-
-  beforeEach(async () => {
-    counselors = await initCouncil(donor, sudoer);
-  });
-
-  afterEach(async () => {
-    await clearCouncil(sudoer);
-    await clearTechComm(sudoer);
-  });
-
-  async function proposalFromMoreThanHalfCouncil(proposal: any) {
-    return await usingPlaygrounds(async (helper) => {
-      expect((await helper.callRpc('api.query.councilMembership.members')).toJSON().length).to.be.equal(5);
-      const proposeResult = await helper.council.collective.propose(
-        counselors.filip,
-        proposal,
-        moreThanHalfCouncilThreshold,
-      );
-
-      const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
-      const proposalIndex = councilProposedEvent.proposalIndex;
-      const proposalHash = councilProposedEvent.proposalHash;
-
-
-      await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
-      await helper.council.collective.vote(counselors.charu, proposalHash, proposalIndex, true);
-      await helper.council.collective.vote(counselors.filip, proposalHash, proposalIndex, true);
-
-      return await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
-    });
-  }
-
-  async function proposalFromAllCouncil(proposal: any) {
-    return await usingPlaygrounds(async (helper) => {
-      expect((await helper.callRpc('api.query.councilMembership.members')).toJSON().length).to.be.equal(5);
-      const proposeResult = await helper.council.collective.propose(
-        counselors.filip,
-        proposal,
-        moreThanHalfCouncilThreshold,
-      );
-
-      const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
-      const proposalIndex = councilProposedEvent.proposalIndex;
-      const proposalHash = councilProposedEvent.proposalHash;
-
-
-      await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
-      await helper.council.collective.vote(counselors.charu, proposalHash, proposalIndex, true);
-      await helper.council.collective.vote(counselors.ildar, proposalHash, proposalIndex, true);
-      await helper.council.collective.vote(counselors.irina, proposalHash, proposalIndex, true);
-      await helper.council.collective.vote(counselors.filip, proposalHash, proposalIndex, true);
-
-      return await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
-    });
-  }
-
-  itSub('>50% of Council can externally propose SuperMajorityAgainst', async ({helper}) => {
-    const forceSetBalanceReceiver = helper.arrange.createEmptyAccount();
-    const forceSetBalanceTestValue = 20n * 10n ** 25n;
-
-    const democracyProposal = await helper.constructApiCall('api.tx.balances.forceSetBalance', [
-      forceSetBalanceReceiver.address, forceSetBalanceTestValue,
-    ]);
-
-    const councilProposal = await helper.democracy.externalProposeDefaultCall(democracyProposal);
-
-    const proposeResult = await helper.council.collective.propose(
-      counselors.filip,
-      councilProposal,
-      moreThanHalfCouncilThreshold,
-    );
-
-    const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
-    const proposalIndex = councilProposedEvent.proposalIndex;
-    const proposalHash = councilProposedEvent.proposalHash;
-
-    await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
-    await helper.council.collective.vote(counselors.charu, proposalHash, proposalIndex, true);
-    await helper.council.collective.vote(counselors.filip, proposalHash, proposalIndex, true);
-
-    await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
-
-    const democracyStartedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-    const democracyReferendumIndex = democracyStartedEvent.referendumIndex;
-    const democracyThreshold = democracyStartedEvent.threshold;
-
-    expect(democracyThreshold).to.be.equal('SuperMajorityAgainst');
-
-    await helper.democracy.vote(counselors.filip, democracyReferendumIndex, {
-      Standard: {
-        vote: {
-          aye: true,
-          conviction: 1,
-        },
-        balance: 10_000n,
-      },
-    });
-
-    await helper.democracy.vote(counselors.charu, democracyReferendumIndex, {
-      Standard: {
-        vote: {
-          aye: false,
-          conviction: 1,
-        },
-        balance: 50_000n,
-      },
-    });
-
-    const passedReferendumEvent = await helper.wait.expectEvent(democracyVotingPeriod, Event.Democracy.Passed);
-    expect(passedReferendumEvent.referendumIndex).to.be.equal(democracyReferendumIndex);
-
-    await helper.wait.expectEvent(democracyEnactmentPeriod, Event.Scheduler.Dispatched);
-    const receiverBalance = await helper.balance.getSubstrate(forceSetBalanceReceiver.address);
-    expect(receiverBalance).to.be.equal(forceSetBalanceTestValue);
-  });
-
-  itSub('Council prime member vote is the default', async ({helper}) => {
-    const newTechCommMember = helper.arrange.createEmptyAccount();
-    const addMemberProposal = helper.technicalCommittee.membership.addMemberCall(newTechCommMember.address);
-    const proposeResult = await helper.council.collective.propose(
-      counselors.filip,
-      addMemberProposal,
-      moreThanHalfCouncilThreshold,
-    );
-
-    const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
-    const proposalIndex = councilProposedEvent.proposalIndex;
-    const proposalHash = councilProposedEvent.proposalHash;
-
-    await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
-
-    await helper.wait.newBlocks(councilMotionDuration);
-    const closeResult = await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
-    const closeEvent = Event.Council.Closed.expect(closeResult);
-    const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON() as string[];
-    expect(closeEvent.yes).to.be.equal(members.length);
-  });
-
-  itSub('Superuser can add a member', async ({helper}) => {
-    const newMember = helper.arrange.createEmptyAccount();
-    await expect(helper.getSudo().council.membership.addMember(sudoer, newMember.address)).to.be.fulfilled;
-
-    const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
-    expect(members).to.contains(newMember.address);
-  });
-
-  itSub('Superuser can remove a member', async ({helper}) => {
-    await expect(helper.getSudo().council.membership.removeMember(sudoer, counselors.alex.address)).to.be.fulfilled;
-
-    const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
-    expect(members).to.not.contains(counselors.alex.address);
-  });
-
-  itSub('>50% Council can add TechComm member', async ({helper}) => {
-    const newTechCommMember = helper.arrange.createEmptyAccount();
-    const addMemberProposal = helper.technicalCommittee.membership.addMemberCall(newTechCommMember.address);
-
-    await proposalFromMoreThanHalfCouncil(addMemberProposal);
-
-    const techCommMembers = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
-    expect(techCommMembers).to.contains(newTechCommMember.address);
-  });
-
-  itSub('Council can remove TechComm member', async ({helper}) => {
-    const techComm = await initTechComm(donor, sudoer);
-    const removeMemberPrpoposal = helper.technicalCommittee.membership.removeMemberCall(techComm.andy.address);
-    await proposalFromMoreThanHalfCouncil(removeMemberPrpoposal);
-
-    const techCommMembers = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
-    expect(techCommMembers).to.not.contains(techComm.andy.address);
-  });
-
-  itSub.skip('Council member can add Fellowship member', async ({helper}) => {
-    const newFellowshipMember = helper.arrange.createEmptyAccount();
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.fellowship.collective.addMemberCall(newFellowshipMember.address),
-    )).to.be.fulfilled;
-    const fellowshipMembers = (await helper.callRpc('api.query.fellowshipCollective.members')).toJSON();
-    expect(fellowshipMembers).to.contains(newFellowshipMember.address);
-  });
-
-  itSub('>50% Council can promote Fellowship member', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-    const memberWithZeroRank = fellowship[0][0];
-
-    const proposal = helper.fellowship.collective.promoteCall(memberWithZeroRank.address);
-    await proposalFromMoreThanHalfCouncil(proposal);
-    const record = (await helper.callRpc('api.query.fellowshipCollective.members', [memberWithZeroRank.address])).toJSON();
-    expect(record).to.be.deep.equal({rank: 1});
-
-    await clearFellowship(sudoer);
-  });
-
-  itSub('>50% Council can demote Fellowship member', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-    const memberWithRankOne = fellowship[1][0];
-
-    const proposal = helper.fellowship.collective.demoteCall(memberWithRankOne.address);
-    await proposalFromMoreThanHalfCouncil(proposal);
-
-    const record = (await helper.callRpc('api.query.fellowshipCollective.members', [memberWithRankOne.address])).toJSON();
-    expect(record).to.be.deep.equal({rank: 0});
-
-    await clearFellowship(sudoer);
-  });
-
-  itSub('>50% Council can add\remove Fellowship member', async ({helper}) => {
-    try {
-      const newMember = helper.arrange.createEmptyAccount();
-
-      const proposalAdd = helper.fellowship.collective.addMemberCall(newMember.address);
-      const proposalRemove = helper.fellowship.collective.removeMemberCall(newMember.address, fellowshipRankLimit);
-      await expect(proposalFromMoreThanHalfCouncil(proposalAdd)).to.be.fulfilled;
-      expect(await helper.fellowship.collective.getMembers()).to.be.deep.contain(newMember.address);
-      await expect(proposalFromMoreThanHalfCouncil(proposalRemove)).to.be.fulfilled;
-      expect(await helper.fellowship.collective.getMembers()).to.be.not.deep.contain(newMember.address);
-    }
-    finally {
-      await clearFellowship(sudoer);
-    }
-  });
-
-  itSub('Council can blacklist Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await expect(proposalFromAllCouncil(helper.democracy.blacklistCall(preimageHash, null))).to.be.fulfilled;
-  });
-
-  itSub('Sudo can blacklist Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await expect(helper.getSudo().democracy.blacklist(sudoer, preimageHash)).to.be.fulfilled;
-  });
-
-  itSub('[Negative] Council cannot add Council member', async ({helper}) => {
-    const newCouncilMember = helper.arrange.createEmptyAccount();
-    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);
-
-    await expect(proposalFromAllCouncil(addMemberProposal)).to.be.rejected;
-  });
-
-  itSub('[Negative] Council cannot remove Council member', async ({helper}) => {
-    const removeMemberProposal = helper.council.membership.removeMemberCall(counselors.alex.address);
-
-    await expect(proposalFromAllCouncil(removeMemberProposal)).to.be.rejected;
-  });
-
-  itSub('[Negative] Council cannot submit regular democracy proposal', async ({helper}) => {
-    const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);
-
-    await expect(proposalFromAllCouncil(councilProposal)).to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Council cannot externally propose SimpleMajority', async ({helper}) => {
-    const councilProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));
-
-    await expect(proposalFromAllCouncil(councilProposal)).to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Council cannot externally propose SuperMajorityApprove', async ({helper}) => {
-    const councilProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));
-
-    await expect(proposalFromAllCouncil(councilProposal)).to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Council member cannot add/remove a Council member', async ({helper}) => {
-    const newCouncilMember = helper.arrange.createEmptyAccount();
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.council.membership.addMemberCall(newCouncilMember.address),
-    )).to.be.rejectedWith('BadOrigin');
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.council.membership.removeMemberCall(counselors.charu.address),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] Council cannot set/clear Council prime member', async ({helper}) => {
-    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);
-    const proposalForClear = await helper.council.membership.clearPrimeCall();
-
-    await expect(proposalFromAllCouncil(proposalForSet)).to.be.rejectedWith(/BadOrigin/);
-    await expect(proposalFromAllCouncil(proposalForClear)).to.be.rejectedWith(/BadOrigin/);
-
-  });
-
-  itSub('[Negative] Council member cannot set/clear Council prime member', async ({helper}) => {
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.council.membership.setPrimeCall(counselors.charu.address),
-    )).to.be.rejectedWith('BadOrigin');
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.council.membership.clearPrimeCall(),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] Council member cannot add/remove a TechComm member', async ({helper}) => {
-    const newTechCommMember = helper.arrange.createEmptyAccount();
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.technicalCommittee.membership.addMemberCall(newTechCommMember.address),
-    )).to.be.rejectedWith('BadOrigin');
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.technicalCommittee.membership.removeMemberCall(newTechCommMember.address),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] Council member cannot promote/demote a Fellowship member', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-    const memberWithRankOne = fellowship[1][0];
-
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.fellowship.collective.promoteCall(memberWithRankOne.address),
-    )).to.be.rejectedWith('BadOrigin');
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.fellowship.collective.demoteCall(memberWithRankOne.address),
-    )).to.be.rejectedWith('BadOrigin');
-    await clearFellowship(sudoer);
-  });
-
-  itSub('[Negative] Council cannot fast-track Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await expect(proposalFromAllCouncil(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0)))
-      .to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Council member cannot fast-track Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] Council cannot cancel Democracy proposals', async ({helper}) => {
-    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
-    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
-
-    await expect(proposalFromAllCouncil(helper.democracy.cancelProposalCall(proposalIndex)))
-      .to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Council member cannot cancel Democracy proposals', async ({helper}) => {
-
-    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
-    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
-
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.democracy.cancelProposalCall(proposalIndex),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] Council cannot cancel ongoing Democracy referendums', async ({helper}) => {
-    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
-    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-    const referendumIndex = startedEvent.referendumIndex;
-
-    await expect(proposalFromAllCouncil(helper.democracy.emergencyCancelCall(referendumIndex)))
-      .to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Council member cannot cancel ongoing Democracy referendums', async ({helper}) => {
-    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
-    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-    const referendumIndex = startedEvent.referendumIndex;
-
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.democracy.emergencyCancelCall(referendumIndex),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] Council cannot cancel Fellowship referendums', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-    const fellowshipProposer = fellowship[5][0];
-    const proposal = dummyProposal(helper);
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      fellowshipProposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-
-    await expect(proposalFromAllCouncil(helper.fellowship.referenda.cancelCall(referendumIndex)))
-      .to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Council member cannot cancel Fellowship referendums', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-    const fellowshipProposer = fellowship[5][0];
-    const proposal = dummyProposal(helper);
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      fellowshipProposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-    await expect(helper.council.collective.execute(
-      counselors.alex,
-      helper.fellowship.referenda.cancelCall(referendumIndex),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] Council referendum cannot be closed until the voting threshold is met', async ({helper}) => {
-    const councilSize = (await helper.callRpc('api.query.councilMembership.members')).toJSON().length as any as number;
-    expect(councilSize).is.greaterThan(1);
-    const proposeResult = await helper.council.collective.propose(
-      counselors.filip,
-      dummyProposalCall(helper),
-      councilSize,
-    );
-
-    const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
-    const proposalIndex = councilProposedEvent.proposalIndex;
-    const proposalHash = councilProposedEvent.proposalHash;
-
-
-    await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
-    await expect(helper.council.collective.close(counselors.filip, proposalHash, proposalIndex)).to.be.rejectedWith('TooEarly');
-  });
-
-});
deletedjs-packages/tests/governance/democracy.test.tsdiffbeforeafterboth
--- a/js-packages/tests/governance/democracy.test.ts
+++ /dev/null
@@ -1,89 +0,0 @@
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
-import {clearFellowship, democracyLaunchPeriod, democracyTrackMinRank, dummyProposalCall, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, fellowshipPreparePeriod, fellowshipPropositionOrigin, initFellowship, voteUnanimouslyInFellowship} from './util.js';
-import {Event} from '@unique/playgrounds/unique.dev.js';
-
-describeGov('Governance: Democracy tests', () => {
-  let regularUser: IKeyringPair;
-  let donor: IKeyringPair;
-  let sudoer: IKeyringPair;
-
-  before(async function() {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.Democracy]);
-
-      donor = await privateKey({url: import.meta.url});
-      sudoer = await privateKey('//Alice');
-
-      [regularUser] = await helper.arrange.createAccounts([1000n], donor);
-    });
-  });
-
-  itSub('Regular user can vote', async ({helper}) => {
-    const fellows = await initFellowship(donor, sudoer);
-    const rank1Proposer = fellows[1][0];
-
-    const democracyProposalCall = dummyProposalCall(helper);
-    const fellowshipProposal = {
-      Inline: helper.democracy.proposeCall(democracyProposalCall, 0n).method.toHex(),
-    };
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      rank1Proposer,
-      fellowshipPropositionOrigin,
-      fellowshipProposal,
-      {After: 0},
-    );
-
-    const fellowshipReferendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-    await voteUnanimouslyInFellowship(helper, fellows, democracyTrackMinRank, fellowshipReferendumIndex);
-    await helper.fellowship.referenda.placeDecisionDeposit(donor, fellowshipReferendumIndex);
-
-    await helper.wait.expectEvent(
-      fellowshipPreparePeriod + fellowshipConfirmPeriod + fellowshipMinEnactPeriod,
-      Event.Democracy.Proposed,
-    );
-
-    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-    const referendumIndex = startedEvent.referendumIndex;
-
-    const ayeBalance = 10_000n;
-
-    await helper.democracy.vote(regularUser, referendumIndex, {
-      Standard: {
-        vote: {
-          aye: true,
-          conviction: 1,
-        },
-        balance: ayeBalance,
-      },
-    });
-
-    const referendumInfo = await helper.democracy.referendumInfo(referendumIndex);
-    const tally = referendumInfo.ongoing.tally;
-
-    expect(BigInt(tally.ayes)).to.be.equal(ayeBalance);
-
-    await clearFellowship(sudoer);
-  });
-
-  itSub('[Negative] Regular user cannot submit a regular proposal', async ({helper}) => {
-    const submitResult = helper.democracy.propose(regularUser, dummyProposalCall(helper), 0n);
-    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Regular user cannot externally propose SuperMajorityAgainst', async ({helper}) => {
-    const submitResult = helper.democracy.externalProposeDefault(regularUser, dummyProposalCall(helper));
-    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Regular user cannot externally propose SimpleMajority', async ({helper}) => {
-    const submitResult = helper.democracy.externalProposeMajority(regularUser, dummyProposalCall(helper));
-    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Regular user cannot externally propose SuperMajorityApprove', async ({helper}) => {
-    const submitResult = helper.democracy.externalPropose(regularUser, dummyProposalCall(helper));
-    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
-  });
-});
deletedjs-packages/tests/governance/fellowship.test.tsdiffbeforeafterboth
--- a/js-packages/tests/governance/fellowship.test.ts
+++ /dev/null
@@ -1,335 +0,0 @@
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
-import {DevUniqueHelper, Event} from '@unique/playgrounds/unique.dev.js';
-import {initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, voteUnanimouslyInFellowship, democracyTrackMinRank, fellowshipPreparePeriod, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, democracyTrackId, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util.js';
-import type {ICounselors, ITechComms} from './util.js';
-
-describeGov('Governance: Fellowship tests', () => {
-  let members: IKeyringPair[][];
-
-  let rank1Proposer: IKeyringPair;
-
-  let sudoer: any;
-  let donor: any;
-  let counselors: ICounselors;
-  let techcomms: ITechComms;
-
-  const submissionDeposit = 1000n;
-
-  async function testBadFellowshipProposal(
-    helper: DevUniqueHelper,
-    proposalCall: any,
-  ) {
-    const badProposal = {
-      Inline: proposalCall.method.toHex(),
-    };
-    const submitResult = await helper.fellowship.referenda.submit(
-      rank1Proposer,
-      fellowshipPropositionOrigin,
-      badProposal,
-      defaultEnactmentMoment,
-    );
-
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-    await voteUnanimouslyInFellowship(helper, members, democracyTrackMinRank, referendumIndex);
-    await helper.fellowship.referenda.placeDecisionDeposit(donor, referendumIndex);
-
-    const enactmentId = await helper.fellowship.referenda.enactmentEventId(referendumIndex);
-    const dispatchedEvent = await helper.wait.expectEvent(
-      fellowshipPreparePeriod + fellowshipConfirmPeriod + defaultEnactmentMoment.After,
-      Event.Scheduler.Dispatched,
-      (event: any) => event.id == enactmentId,
-    );
-
-    expect(dispatchedEvent.result.isErr, 'Bad Fellowship must fail')
-      .to.be.true;
-
-    expect(dispatchedEvent.result.asErr.isBadOrigin, 'Bad Fellowship must fail with BadOrigin')
-      .to.be.true;
-  }
-
-  before(async function() {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.Democracy, Pallets.Fellowship, Pallets.TechnicalCommittee, Pallets.Council]);
-
-      sudoer = await privateKey('//Alice');
-      donor = await privateKey({url: import.meta.url});
-    });
-
-    counselors = await initCouncil(donor, sudoer);
-    techcomms = await initTechComm(donor, sudoer);
-    members = await initFellowship(donor, sudoer);
-
-    rank1Proposer = members[1][0];
-  });
-
-  after(async () => {
-    await clearFellowship(sudoer);
-    await clearTechComm(sudoer);
-    await clearCouncil(sudoer);
-    await hardResetFellowshipReferenda(sudoer);
-    await hardResetDemocracy(sudoer);
-    await hardResetGovScheduler(sudoer);
-  });
-
-  itSub('FellowshipProposition can submit regular Democracy proposals', async ({helper}) => {
-    const democracyProposalCall = dummyProposalCall(helper);
-    const fellowshipProposal = {
-      Inline: helper.democracy.proposeCall(democracyProposalCall, 0n).method.toHex(),
-    };
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      rank1Proposer,
-      fellowshipPropositionOrigin,
-      fellowshipProposal,
-      defaultEnactmentMoment,
-    );
-
-    const fellowshipReferendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-    await voteUnanimouslyInFellowship(helper, members, democracyTrackMinRank, fellowshipReferendumIndex);
-    await helper.fellowship.referenda.placeDecisionDeposit(donor, fellowshipReferendumIndex);
-
-    const democracyProposed = await helper.wait.expectEvent(
-      fellowshipPreparePeriod + fellowshipConfirmPeriod + fellowshipMinEnactPeriod,
-      Event.Democracy.Proposed,
-    );
-
-    const democracyEnqueuedProposal = await helper.democracy.expectPublicProposal(democracyProposed.proposalIndex);
-    expect(democracyEnqueuedProposal.inline, 'Fellowship proposal expected to be in the Democracy')
-      .to.be.equal(democracyProposalCall.method.toHex());
-
-    await helper.wait.newBlocks(democracyVotingPeriod);
-  });
-
-  itSub('Fellowship (rank-1 or greater) member can submit Fellowship proposals on the Democracy track', async ({helper}) => {
-    for(let rank = 1; rank < fellowshipRankLimit; rank++) {
-      const rankMembers = members[rank];
-
-      for(let memberIdx = 0; memberIdx < rankMembers.length; memberIdx++) {
-        const member = rankMembers[memberIdx];
-        const newDummyProposal = dummyProposal(helper);
-
-        const submitResult = await helper.fellowship.referenda.submit(
-          member,
-          fellowshipPropositionOrigin,
-          newDummyProposal,
-          defaultEnactmentMoment,
-        );
-
-        const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-        const referendumInfo = await helper.fellowship.referenda.referendumInfo(referendumIndex);
-        expect(referendumInfo.ongoing.track, `${memberIdx}-th member of rank #${rank}: proposal #${referendumIndex} is on invalid track`)
-          .to.be.equal(democracyTrackId);
-      }
-    }
-  });
-
-  itSub(`Fellowship (rank-${democracyTrackMinRank} or greater) members can vote on the Democracy track`, async ({helper}) => {
-    const proposal = dummyProposal(helper);
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      rank1Proposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-
-    let expectedAyes = 0;
-    for(let rank = democracyTrackMinRank; rank < fellowshipRankLimit; rank++) {
-      const rankMembers = members[rank];
-
-      for(let memberIdx = 0; memberIdx < rankMembers.length; memberIdx++) {
-        const member = rankMembers[memberIdx];
-        await helper.fellowship.collective.vote(member, referendumIndex, true);
-        expectedAyes += 1;
-
-        const referendumInfo = await helper.fellowship.referenda.referendumInfo(referendumIndex);
-        expect(referendumInfo.ongoing.tally.bareAyes, `Vote from ${memberIdx}-th member of rank #${rank} isn't accounted`)
-          .to.be.equal(expectedAyes);
-      }
-    }
-  });
-
-  itSub('Fellowship rank vote strength is correct', async ({helper}) => {
-    const excessRankWeightTable = [
-      1,
-      3,
-      6,
-      10,
-      15,
-      21,
-    ];
-
-    const proposal = dummyProposal(helper);
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      rank1Proposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-
-    for(let rank = democracyTrackMinRank; rank < fellowshipRankLimit; rank++) {
-      const rankMembers = members[rank];
-
-      for(let memberIdx = 0; memberIdx < rankMembers.length; memberIdx++) {
-        const member = rankMembers[memberIdx];
-
-        const referendumInfoBefore = await helper.fellowship.referenda.referendumInfo(referendumIndex);
-        const ayesBefore = referendumInfoBefore.ongoing.tally.ayes;
-
-        await helper.fellowship.collective.vote(member, referendumIndex, true);
-
-        const referendumInfoAfter = await helper.fellowship.referenda.referendumInfo(referendumIndex);
-        const ayesAfter = referendumInfoAfter.ongoing.tally.ayes;
-
-        const expectedVoteWeight = excessRankWeightTable[rank - democracyTrackMinRank];
-        const voteWeight = ayesAfter - ayesBefore;
-
-        expect(voteWeight, `Vote weight of ${memberIdx}-th member of rank #${rank} is invalid`)
-          .to.be.equal(expectedVoteWeight);
-      }
-    }
-  });
-
-  itSub('[Negative] FellowshipProposition cannot externally propose SuperMajorityAgainst', async ({helper}) => {
-    await testBadFellowshipProposal(helper, helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper)));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot externally propose SimpleMajority', async ({helper}) => {
-    await testBadFellowshipProposal(helper, helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper)));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot externally propose SuperMajorityApprove', async ({helper}) => {
-    await testBadFellowshipProposal(helper, helper.democracy.externalProposeCall(dummyProposalCall(helper)));
-  });
-
-  itSub('[Negative] Fellowship (rank-0) member cannot submit Fellowship proposals on the Democracy track', async ({helper}) => {
-    const rank0Proposer = members[0][0];
-
-    const proposal = dummyProposal(helper);
-
-    const submitResult = helper.fellowship.referenda.submit(
-      rank0Proposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-
-    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
-  });
-
-  itSub('[Negative] Fellowship (rank-1 or greater) member cannot submit if no deposit can be provided', async ({helper}) => {
-    const poorMember = rank1Proposer;
-
-    const balanceBefore = await helper.balance.getSubstrate(poorMember.address);
-    await helper.getSudo().balance.setBalanceSubstrate(sudoer, poorMember.address, submissionDeposit - 1n);
-
-    const proposal = dummyProposal(helper);
-
-    const submitResult = helper.fellowship.referenda.submit(
-      poorMember,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-
-    await expect(submitResult).to.be.rejectedWith(/account balance too low/);
-
-    await helper.getSudo().balance.setBalanceSubstrate(sudoer, poorMember.address, balanceBefore);
-  });
-
-  itSub(`[Negative] Fellowship (rank-${democracyTrackMinRank - 1} or less) members cannot vote on the Democracy track`, async ({helper}) => {
-    const proposal = dummyProposal(helper);
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      rank1Proposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-
-    for(let rank = 0; rank < democracyTrackMinRank; rank++) {
-      for(const member of members[rank]) {
-        const voteResult = helper.fellowship.collective.vote(member, referendumIndex, true);
-        await expect(voteResult).to.be.rejectedWith(/RankTooLow/);
-      }
-    }
-  });
-
-  itSub('[Negative] FellowshipProposition cannot add/remove a Council member', async ({helper}) => {
-    const [councilNonMember] = await helper.arrange.createAccounts([10n], donor);
-
-    await testBadFellowshipProposal(helper, helper.council.membership.addMemberCall(councilNonMember.address));
-    await testBadFellowshipProposal(helper, helper.council.membership.removeMemberCall(counselors.ildar.address));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot set/clear Council prime member', async ({helper}) => {
-    await testBadFellowshipProposal(helper, helper.council.membership.setPrimeCall(counselors.ildar.address));
-    await testBadFellowshipProposal(helper, helper.council.membership.clearPrimeCall());
-  });
-
-  itSub('[Negative] FellowshipProposition cannot add/remove a TechComm member', async ({helper}) => {
-    const [techCommNonMember] = await helper.arrange.createAccounts([10n], donor);
-
-    await testBadFellowshipProposal(helper, helper.technicalCommittee.membership.addMemberCall(techCommNonMember.address));
-    await testBadFellowshipProposal(helper, helper.technicalCommittee.membership.removeMemberCall(techcomms.constantine.address));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot add/remove a Fellowship member', async ({helper}) => {
-    const [fellowshipNonMember] = await helper.arrange.createAccounts([10n], donor);
-
-    await testBadFellowshipProposal(helper, helper.fellowship.collective.addMemberCall(fellowshipNonMember.address));
-    await testBadFellowshipProposal(helper, helper.fellowship.collective.removeMemberCall(rank1Proposer.address, 1));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot promote/demote a Fellowship member', async ({helper}) => {
-    await testBadFellowshipProposal(helper, helper.fellowship.collective.promoteCall(rank1Proposer.address));
-    await testBadFellowshipProposal(helper, helper.fellowship.collective.demoteCall(rank1Proposer.address));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot fast-track Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await testBadFellowshipProposal(helper, helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot cancel Democracy proposals', async ({helper}) => {
-    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
-    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
-
-    await testBadFellowshipProposal(helper, helper.democracy.cancelProposalCall(proposalIndex));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot cancel ongoing Democracy referendums', async ({helper}) => {
-    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
-    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-    const referendumIndex = startedEvent.referendumIndex;
-
-    await testBadFellowshipProposal(helper, helper.democracy.emergencyCancelCall(referendumIndex));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot blacklist Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await testBadFellowshipProposal(helper, helper.democracy.blacklistCall(preimageHash, null));
-  });
-
-  itSub('[Negative] FellowshipProposition cannot veto external proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await testBadFellowshipProposal(helper, helper.democracy.vetoExternalCall(preimageHash));
-  });
-});
deletedjs-packages/tests/governance/init.test.tsdiffbeforeafterboth
--- a/js-packages/tests/governance/init.test.ts
+++ /dev/null
@@ -1,193 +0,0 @@
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
-import {Event} from '@unique/playgrounds/unique.dev.js';
-import {democracyLaunchPeriod, democracyVotingPeriod, democracyEnactmentPeriod, clearCouncil, clearTechComm, clearFellowship} from './util.js';
-import type {ICounselors, ITechComms} from './util.js';
-
-describeGov('Governance: Initialization', () => {
-  let donor: IKeyringPair;
-  let sudoer: IKeyringPair;
-  let counselors: ICounselors;
-  let techcomms: ITechComms;
-  let coreDevs: any;
-
-  const expectedAlexFellowRank = 7;
-  const expectedFellowRank = 6;
-
-  before(async function() {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.Democracy, Pallets.Council, Pallets.TechnicalCommittee]);
-
-      const councilMembers = await helper.council.membership.getMembers();
-      const techcommMembers = await helper.technicalCommittee.membership.getMembers();
-      expect(councilMembers.length == 0, 'The Council must be empty before the Gov Init');
-      expect(techcommMembers.length == 0, 'The Technical Commettee must be empty before the Gov Init');
-
-      donor = await privateKey({url: import.meta.url});
-      sudoer = await privateKey('//Alice');
-
-      const counselorsNum = 5;
-      const techCommsNum = 3;
-      const coreDevsNum = 2;
-      const [
-        alex,
-        ildar,
-        charu,
-        filip,
-        irina,
-
-        greg,
-        andy,
-        constantine,
-
-        yaroslav,
-        daniel,
-      ] = await helper.arrange.createAccounts(new Array(counselorsNum + techCommsNum + coreDevsNum).fill(10_000n), donor);
-
-      counselors = {
-        alex,
-        ildar,
-        charu,
-        filip,
-        irina,
-      };
-
-      techcomms = {
-        greg,
-        andy,
-        constantine,
-      };
-
-      coreDevs = {
-        yaroslav: yaroslav,
-        daniel: daniel,
-      };
-    });
-  });
-
-  itSub('Initialize Governance', async ({helper}) => {
-    const promoteFellow = (fellow: string, promotionsNum: number) => new Array(promotionsNum).fill(helper.fellowship.collective.promoteCall(fellow));
-
-    const expectFellowRank = async (fellow: string, expectedRank: number) => {
-      expect(await helper.fellowship.collective.getMemberRank(fellow)).to.be.equal(expectedRank);
-    };
-
-    console.log('\t- Setup the Prime of the Council via sudo');
-    await helper.getSudo().utility.batchAll(sudoer, [
-      helper.council.membership.addMemberCall(counselors.alex.address),
-      helper.council.membership.setPrimeCall(counselors.alex.address),
-
-      helper.fellowship.collective.addMemberCall(counselors.alex.address),
-      ...promoteFellow(counselors.alex.address, expectedAlexFellowRank),
-    ]);
-
-    let councilMembers = await helper.council.membership.getMembers();
-    const councilPrime = await helper.council.collective.getPrimeMember();
-    const alexFellowRank = await helper.fellowship.collective.getMemberRank(counselors.alex.address);
-    expect(councilMembers).to.be.deep.equal([counselors.alex.address]);
-    expect(councilPrime).to.be.equal(counselors.alex.address);
-    expect(alexFellowRank).to.be.equal(expectedAlexFellowRank);
-
-    console.log('\t- The Council Prime initializes the Technical Commettee');
-    const councilProposalThreshold = 1;
-
-    await helper.council.collective.propose(
-      counselors.alex,
-      helper.utility.batchAllCall([
-        helper.technicalCommittee.membership.addMemberCall(techcomms.greg.address),
-        helper.technicalCommittee.membership.addMemberCall(techcomms.andy.address),
-        helper.technicalCommittee.membership.addMemberCall(techcomms.constantine.address),
-
-        helper.technicalCommittee.membership.setPrimeCall(techcomms.greg.address),
-      ]),
-      councilProposalThreshold,
-    );
-
-    const techCommMembers = await helper.technicalCommittee.membership.getMembers();
-    const techCommPrime = await helper.technicalCommittee.membership.getPrimeMember();
-    const expectedTechComms = [techcomms.greg.address, techcomms.andy.address, techcomms.constantine.address];
-    expect(techCommMembers.length).to.be.equal(expectedTechComms.length);
-    expect(techCommMembers).to.containSubset(expectedTechComms);
-    expect(techCommPrime).to.be.equal(techcomms.greg.address);
-
-    console.log('\t- The Council Prime initiates a referendum to add counselors');
-    const returnPreimageHash = true;
-    const preimageHash = await helper.preimage.notePreimageFromCall(counselors.alex, helper.utility.batchAllCall([
-      helper.council.membership.addMemberCall(counselors.ildar.address),
-      helper.council.membership.addMemberCall(counselors.charu.address),
-      helper.council.membership.addMemberCall(counselors.filip.address),
-      helper.council.membership.addMemberCall(counselors.irina.address),
-
-      helper.fellowship.collective.addMemberCall(counselors.charu.address),
-      helper.fellowship.collective.addMemberCall(counselors.ildar.address),
-      helper.fellowship.collective.addMemberCall(counselors.irina.address),
-      helper.fellowship.collective.addMemberCall(counselors.filip.address),
-      helper.fellowship.collective.addMemberCall(techcomms.greg.address),
-      helper.fellowship.collective.addMemberCall(techcomms.andy.address),
-      helper.fellowship.collective.addMemberCall(techcomms.constantine.address),
-      helper.fellowship.collective.addMemberCall(coreDevs.yaroslav.address),
-      helper.fellowship.collective.addMemberCall(coreDevs.daniel.address),
-
-      ...promoteFellow(counselors.charu.address, expectedFellowRank),
-      ...promoteFellow(counselors.ildar.address, expectedFellowRank),
-      ...promoteFellow(counselors.irina.address, expectedFellowRank),
-      ...promoteFellow(counselors.filip.address, expectedFellowRank),
-      ...promoteFellow(techcomms.greg.address, expectedFellowRank),
-      ...promoteFellow(techcomms.andy.address, expectedFellowRank),
-      ...promoteFellow(techcomms.constantine.address, expectedFellowRank),
-      ...promoteFellow(coreDevs.yaroslav.address, expectedFellowRank),
-      ...promoteFellow(coreDevs.daniel.address, expectedFellowRank),
-    ]), returnPreimageHash);
-
-    await helper.council.collective.propose(
-      counselors.alex,
-      helper.democracy.externalProposeDefaultWithPreimageCall(preimageHash),
-      councilProposalThreshold,
-    );
-
-    console.log('\t- The referendum is being decided');
-    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-
-    await helper.democracy.vote(counselors.filip, startedEvent.referendumIndex, {
-      Standard: {
-        vote: {
-          aye: true,
-          conviction: 1,
-        },
-        balance: 10_000n,
-      },
-    });
-
-    const passedReferendumEvent = await helper.wait.expectEvent(democracyVotingPeriod, Event.Democracy.Passed);
-    expect(passedReferendumEvent.referendumIndex).to.be.equal(startedEvent.referendumIndex);
-
-    await helper.wait.expectEvent(democracyEnactmentPeriod, Event.Scheduler.Dispatched);
-
-    councilMembers = await helper.council.membership.getMembers();
-    const expectedCounselors = [
-      counselors.alex.address,
-      counselors.ildar.address,
-      counselors.charu.address,
-      counselors.filip.address,
-      counselors.irina.address,
-    ];
-    expect(councilMembers.length).to.be.equal(expectedCounselors.length);
-    expect(councilMembers).to.containSubset(expectedCounselors);
-
-    await expectFellowRank(counselors.ildar.address, expectedFellowRank);
-    await expectFellowRank(counselors.charu.address, expectedFellowRank);
-    await expectFellowRank(counselors.filip.address, expectedFellowRank);
-    await expectFellowRank(counselors.irina.address, expectedFellowRank);
-    await expectFellowRank(techcomms.greg.address, expectedFellowRank);
-    await expectFellowRank(techcomms.andy.address, expectedFellowRank);
-    await expectFellowRank(techcomms.constantine.address, expectedFellowRank);
-    await expectFellowRank(coreDevs.yaroslav.address, expectedFellowRank);
-    await expectFellowRank(coreDevs.daniel.address, expectedFellowRank);
-  });
-
-  after(async function() {
-    await clearFellowship(sudoer);
-    await clearTechComm(sudoer);
-    await clearCouncil(sudoer);
-  });
-});
deletedjs-packages/tests/governance/technicalCommittee.test.tsdiffbeforeafterboth
--- a/js-packages/tests/governance/technicalCommittee.test.ts
+++ /dev/null
@@ -1,383 +0,0 @@
-import type {IKeyringPair} from '@polkadot/types/types';
-import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../util/index.js';
-import {Event} from '@unique/playgrounds/unique.dev.js';
-import {initCouncil, democracyLaunchPeriod, democracyFastTrackVotingPeriod, clearCouncil, clearTechComm, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util.js';
-import type {ITechComms} from './util.js';
-
-describeGov('Governance: Technical Committee tests', () => {
-  let sudoer: IKeyringPair;
-  let techcomms: ITechComms;
-  let donor: IKeyringPair;
-  let preImageHash: string;
-
-
-  const allTechCommitteeThreshold = 3;
-
-  before(async function() {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.TechnicalCommittee]);
-      sudoer = await privateKey('//Alice');
-      donor = await privateKey({url: import.meta.url});
-
-      techcomms = await initTechComm(donor, sudoer);
-
-      const proposalCall = await helper.constructApiCall('api.tx.balances.forceSetBalance', [donor.address, 20n * 10n ** 25n]);
-      preImageHash = await helper.preimage.notePreimageFromCall(sudoer, proposalCall, true);
-    });
-  });
-
-  after(async () => {
-    await usingPlaygrounds(async (helper) => {
-      await clearTechComm(sudoer);
-
-      await helper.preimage.unnotePreimage(sudoer, preImageHash);
-      await hardResetFellowshipReferenda(sudoer);
-      await hardResetDemocracy(sudoer);
-      await hardResetGovScheduler(sudoer);
-    });
-  });
-
-  function proposalFromAllCommittee(proposal: any) {
-    return usingPlaygrounds(async (helper) => {
-      expect((await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length).to.be.equal(allTechCommitteeThreshold);
-      const proposeResult = await helper.technicalCommittee.collective.propose(
-        techcomms.andy,
-        proposal,
-        allTechCommitteeThreshold,
-      );
-
-      const commiteeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);
-      const proposalIndex = commiteeProposedEvent.proposalIndex;
-      const proposalHash = commiteeProposedEvent.proposalHash;
-
-
-      await helper.technicalCommittee.collective.vote(techcomms.andy, proposalHash, proposalIndex, true);
-      await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);
-      await helper.technicalCommittee.collective.vote(techcomms.greg, proposalHash, proposalIndex, true);
-
-      const closeResult = await helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex);
-      Event.TechnicalCommittee.Closed.expect(closeResult);
-      Event.TechnicalCommittee.Approved.expect(closeResult);
-      const {result} = Event.TechnicalCommittee.Executed.expect(closeResult);
-      expect(result).to.eq('Ok');
-
-      return closeResult;
-    });
-  }
-
-  itSub('TechComm can fast-track Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await helper.wait.parachainBlockMultiplesOf(35n);
-
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    const fastTrackProposal = await proposalFromAllCommittee(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0));
-    Event.Democracy.Started.expect(fastTrackProposal);
-  });
-
-  itSub('TechComm can cancel Democracy proposals', async ({helper}) => {
-    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
-    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
-
-    const cancelProposal = await proposalFromAllCommittee(helper.democracy.cancelProposalCall(proposalIndex));
-    Event.Democracy.ProposalCanceled.expect(cancelProposal);
-  });
-
-  itSub('TechComm can cancel ongoing Democracy referendums', async ({helper}) => {
-    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
-    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-    const referendumIndex = startedEvent.referendumIndex;
-
-    const emergencyCancelProposal = await proposalFromAllCommittee(helper.democracy.emergencyCancelCall(referendumIndex));
-    Event.Democracy.Cancelled.expect(emergencyCancelProposal);
-  });
-
-  itSub('TechComm member can veto Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    const vetoExternalCall = await helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.democracy.vetoExternalCall(preimageHash),
-    );
-    Event.Democracy.Vetoed.expect(vetoExternalCall);
-  });
-
-  itSub('TechComm can cancel Fellowship referendums', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-    const fellowshipProposer = fellowship[5][0];
-    const proposal = dummyProposal(helper);
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      fellowshipProposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-    const cancelProposal = await proposalFromAllCommittee(helper.fellowship.referenda.cancelCall(referendumIndex));
-    Event.FellowshipReferenda.Cancelled.expect(cancelProposal);
-  });
-
-  itSub.skip('TechComm member can add a Fellowship member', async ({helper}) => {
-    const newFellowshipMember = helper.arrange.createEmptyAccount();
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.fellowship.collective.addMemberCall(newFellowshipMember.address),
-    )).to.be.fulfilled;
-    const fellowshipMembers = (await helper.callRpc('api.query.fellowshipCollective.members')).toJSON();
-    expect(fellowshipMembers).to.contains(newFellowshipMember.address);
-    await clearFellowship(sudoer);
-  });
-
-  itSub('[Negative] TechComm cannot submit regular democracy proposal', async ({helper}) => {
-    const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);
-
-    await expect(proposalFromAllCommittee(councilProposal)).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm cannot externally propose SuperMajorityAgainst', async ({helper}) => {
-    const commiteeProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));
-
-    await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm cannot externally propose SimpleMajority', async ({helper}) => {
-    const commiteeProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));
-
-    await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm cannot externally propose SuperMajorityApprove', async ({helper}) => {
-    const commiteeProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));
-
-    await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot submit regular democracy proposal', async ({helper}) => {
-    const memberProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      memberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot externally propose SuperMajorityAgainst', async ({helper}) => {
-    const memberProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      memberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot externally propose SimpleMajority', async ({helper}) => {
-    const memberProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      memberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot externally propose SuperMajorityApprove', async ({helper}) => {
-    const memberProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      memberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-
-  itSub.skip('[Negative] TechComm cannot promote/demote Fellowship member', async () => {
-
-  });
-
-  itSub.skip('[Negative] TechComm member cannot promote/demote Fellowship member', async () => {
-
-  });
-
-  itSub('[Negative] TechComm cannot add/remove a Council member', async ({helper}) => {
-    const newCouncilMember = helper.arrange.createEmptyAccount();
-    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);
-    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);
-
-    await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');
-    await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot add/remove a Council member', async ({helper}) => {
-    const newCouncilMember = helper.arrange.createEmptyAccount();
-    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);
-    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      addMemberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      removeMemberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm cannot set/clear Council prime member', async ({helper}) => {
-    const counselors = await initCouncil(donor, sudoer);
-    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);
-    const proposalForClear = await helper.council.membership.clearPrimeCall();
-
-    await expect(proposalFromAllCommittee(proposalForSet)).to.be.rejectedWith('BadOrigin');
-    await expect(proposalFromAllCommittee(proposalForClear)).to.be.rejectedWith('BadOrigin');
-    await clearCouncil(sudoer);
-  });
-
-  itSub('[Negative] TechComm member cannot set/clear Council prime member', async ({helper}) => {
-    const counselors = await initCouncil(donor, sudoer);
-    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);
-    const proposalForClear = await helper.council.membership.clearPrimeCall();
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      proposalForSet,
-    )).to.be.rejectedWith('BadOrigin');
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      proposalForClear,
-    )).to.be.rejectedWith('BadOrigin');
-    await clearCouncil(sudoer);
-  });
-
-  itSub('[Negative] TechComm cannot add/remove a TechComm member', async ({helper}) => {
-    const newCommMember = helper.arrange.createEmptyAccount();
-    const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);
-    const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);
-
-    await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');
-    await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot add/remove a TechComm member', async ({helper}) => {
-    const newCommMember = helper.arrange.createEmptyAccount();
-    const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);
-    const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      addMemberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      removeMemberProposal,
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm cannot remove a Fellowship member', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-
-    await expect(proposalFromAllCommittee(helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5))).to.be.rejectedWith('BadOrigin');
-    await clearFellowship(sudoer);
-  });
-
-  itSub('[Negative] TechComm member cannot remove a Fellowship member', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5),
-    )).to.be.rejectedWith('BadOrigin');
-    await clearFellowship(sudoer);
-  });
-
-  itSub('[Negative] TechComm member cannot fast-track Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot cancel Democracy proposals', async ({helper}) => {
-    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
-    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.democracy.cancelProposalCall(proposalIndex),
-    ))
-      .to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot cancel ongoing Democracy referendums', async ({helper}) => {
-    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
-    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
-    const referendumIndex = startedEvent.referendumIndex;
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.democracy.emergencyCancelCall(referendumIndex),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm cannot blacklist Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await expect(proposalFromAllCommittee(helper.democracy.blacklistCall(preimageHash))).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm member cannot blacklist Democracy proposals', async ({helper}) => {
-    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
-    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.democracy.blacklistCall(preimageHash),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub.skip('[Negative] TechComm member cannot veto external Democracy proposals until the cool-off period pass', async () => {
-
-  });
-
-  itSub('[Negative] TechComm member cannot cancel Fellowship referendums', async ({helper}) => {
-    const fellowship = await initFellowship(donor, sudoer);
-    const fellowshipProposer = fellowship[5][0];
-    const proposal = dummyProposal(helper);
-
-    const submitResult = await helper.fellowship.referenda.submit(
-      fellowshipProposer,
-      fellowshipPropositionOrigin,
-      proposal,
-      defaultEnactmentMoment,
-    );
-
-    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
-
-    await expect(helper.technicalCommittee.collective.execute(
-      techcomms.andy,
-      helper.fellowship.referenda.cancelCall(referendumIndex),
-    )).to.be.rejectedWith('BadOrigin');
-  });
-
-  itSub('[Negative] TechComm referendum cannot be closed until the voting threshold is met', async ({helper}) => {
-    const committeeSize = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length as any as number;
-    expect(committeeSize).is.greaterThan(1);
-    const proposeResult = await helper.technicalCommittee.collective.propose(
-      techcomms.andy,
-      dummyProposalCall(helper),
-      committeeSize,
-    );
-
-    const committeeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);
-    const proposalIndex = committeeProposedEvent.proposalIndex;
-    const proposalHash = committeeProposedEvent.proposalHash;
-
-    await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);
-
-    await expect(helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex)).to.be.rejectedWith('TooEarly');
-  });
-});
deletedjs-packages/tests/governance/util.tsdiffbeforeafterboth
--- a/js-packages/tests/governance/util.ts
+++ /dev/null
@@ -1,224 +0,0 @@
-import type {IKeyringPair} from '@polkadot/types/types';
-import {xxhashAsHex} from '@polkadot/util-crypto';
-import type {u32} from '@polkadot/types-codec';
-import {usingPlaygrounds, expect} from '../util/index.js';
-import {UniqueHelper} from '@unique/playgrounds/unique.js';
-import {DevUniqueHelper} from '@unique/playgrounds/unique.dev.js';
-
-export const democracyLaunchPeriod = 35;
-export const democracyVotingPeriod = 35;
-export const councilMotionDuration = 35;
-export const democracyEnactmentPeriod = 40;
-export const democracyFastTrackVotingPeriod = 5;
-
-export const fellowshipRankLimit = 7;
-export const fellowshipPropositionOrigin = 'FellowshipProposition';
-export const fellowshipPreparePeriod = 3;
-export const fellowshipConfirmPeriod = 3;
-export const fellowshipMinEnactPeriod = 1;
-
-export const defaultEnactmentMoment = {After: 0};
-
-export const democracyTrackId = 10;
-export const democracyTrackMinRank = 3;
-const twox128 = (data: any) => xxhashAsHex(data, 128);
-export interface ICounselors {
-  alex: IKeyringPair;
-  ildar: IKeyringPair;
-  charu: IKeyringPair;
-  filip: IKeyringPair;
-  irina: IKeyringPair;
-}
-export interface ITechComms {
-    greg: IKeyringPair;
-    andy: IKeyringPair;
-    constantine: IKeyringPair;
-}
-
-export async function initCouncil(donor: IKeyringPair, superuser: IKeyringPair) {
-  let counselors: IKeyringPair[] = [];
-
-  await usingPlaygrounds(async (helper) => {
-    const [alex, ildar, charu, filip, irina] = await helper.arrange.createAccounts([10_000n, 10_000n, 10_000n, 10_000n, 10_000n], donor);
-    const sudo = helper.getSudo();
-    {
-      const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON() as [];
-      if(members.length != 0) {
-        await clearCouncil(superuser);
-      }
-    }
-    const expectedMembers = [alex, ildar, charu, filip, irina];
-    for(const member of expectedMembers) {
-      await sudo.executeExtrinsic(superuser, 'api.tx.councilMembership.addMember', [member.address]);
-    }
-    await sudo.executeExtrinsic(superuser, 'api.tx.councilMembership.setPrime', [alex.address]);
-    {
-      const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
-      expect(members).to.containSubset(expectedMembers.map((x: IKeyringPair) => x.address));
-      expect(members.length).to.be.equal(expectedMembers.length);
-    }
-
-    counselors = [alex, ildar, charu, filip, irina];
-  });
-  return {
-    alex: counselors[0],
-    ildar: counselors[1],
-    charu: counselors[2],
-    filip: counselors[3],
-    irina: counselors[4],
-  };
-}
-
-export async function clearCouncil(superuser: IKeyringPair) {
-  await usingPlaygrounds(async (helper) => {
-    let members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
-    if(members.length) {
-      const sudo = helper.getSudo();
-      for(const address of members) {
-        await sudo.executeExtrinsic(superuser, 'api.tx.councilMembership.removeMember', [address]);
-      }
-      members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
-    }
-    expect(members).to.be.deep.equal([]);
-  });
-}
-
-
-export async function initTechComm(donor: IKeyringPair, superuser: IKeyringPair) {
-  let techcomms: IKeyringPair[] = [];
-
-  await usingPlaygrounds(async (helper) => {
-    const [greg, andy, constantine] = await helper.arrange.createAccounts([10_000n, 10_000n, 10_000n], donor);
-    const sudo = helper.getSudo();
-    {
-      const members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON() as [];
-      if(members.length != 0) {
-        await clearTechComm(superuser);
-      }
-    }
-    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.addMember', [greg.address]);
-    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.addMember', [andy.address]);
-    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.addMember', [constantine.address]);
-    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.setPrime', [greg.address]);
-    {
-      const members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
-      expect(members).to.containSubset([greg.address, andy.address, constantine.address]);
-      expect(members.length).to.be.equal(3);
-    }
-
-    techcomms = [greg, andy, constantine];
-  });
-
-  return {
-    greg: techcomms[0],
-    andy: techcomms[1],
-    constantine: techcomms[2],
-  };
-}
-
-export async function clearTechComm(superuser: IKeyringPair) {
-  await usingPlaygrounds(async (helper) => {
-    let members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
-    if(members.length) {
-      const sudo = helper.getSudo();
-      for(const address of members) {
-        await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.removeMember', [address]);
-      }
-      members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
-    }
-    expect(members).to.be.deep.equal([]);
-  });
-}
-
-export async function initFellowship(donor: IKeyringPair, sudoer: IKeyringPair) {
-  const numMembersInRank = 3;
-  const memberBalance = 5000n;
-  const members: IKeyringPair[][] = [];
-
-  await usingPlaygrounds(async (helper) => {
-    const currentFellows = await helper.getApi().query.fellowshipCollective.members.keys();
-
-    if(currentFellows.length != 0) {
-      await clearFellowship(sudoer);
-    }
-    for(let i = 0; i < fellowshipRankLimit; i++) {
-      const rankMembers = await helper.arrange.createAccounts(
-        Array(numMembersInRank).fill(memberBalance),
-        donor,
-      );
-
-      for(const member of rankMembers) {
-        await helper.getSudo().fellowship.collective.addMember(sudoer, member.address);
-
-        for(let rank = 0; rank < i; rank++) {
-          await helper.getSudo().fellowship.collective.promote(sudoer, member.address);
-        }
-      }
-
-      members.push(rankMembers);
-    }
-  });
-
-  return members;
-}
-
-export async function clearFellowship(sudoer: IKeyringPair) {
-  await usingPlaygrounds(async (helper) => {
-    const fellowship = (await helper.getApi().query.fellowshipCollective.members.keys())
-      .map((key) => key.args[0].toString());
-    for(const  member of fellowship) {
-      await helper.getSudo().fellowship.collective.removeMember(sudoer, member, fellowshipRankLimit);
-    }
-  });
-}
-
-export async function clearFellowshipReferenda(sudoer: IKeyringPair) {
-  await usingPlaygrounds(async (helper) => {
-    const proposalsCount = (await helper.getApi().query.fellowshipReferenda.referendumCount()) as u32;
-    for(let i = 0; i < proposalsCount.toNumber(); i++) {
-      await helper.getSudo().fellowship.referenda.cancel(sudoer, i);
-    }
-  });
-}
-
-export async function hardResetFellowshipReferenda(sudoer: IKeyringPair) {
-  await usingPlaygrounds(async (helper) => {
-    const api = helper.getApi();
-    const prefix = twox128('FellowshipReferenda');
-    await helper.signTransaction(sudoer, api.tx.sudo.sudo(api.tx.system.killPrefix(prefix, 100)));
-  });
-}
-
-export async function hardResetDemocracy(sudoer: IKeyringPair) {
-  await usingPlaygrounds(async (helper) => {
-    const api = helper.getApi();
-    const prefix = twox128('Democracy');
-    await helper.signTransaction(sudoer, api.tx.sudo.sudo(api.tx.system.killPrefix(prefix, 100)));
-  });
-}
-
-export async function hardResetGovScheduler(sudoer: IKeyringPair) {
-  await usingPlaygrounds(async (helper) => {
-    const api = helper.getApi();
-    const prefix = twox128('GovScheduler');
-    await helper.signTransaction(sudoer, api.tx.sudo.sudo(api.tx.system.killPrefix(prefix, 500)));
-  });
-}
-
-export async function voteUnanimouslyInFellowship(helper: DevUniqueHelper, fellows: IKeyringPair[][], minRank: number, referendumIndex: number) {
-  for(let rank = minRank; rank < fellowshipRankLimit; rank++) {
-    for(const member of fellows[rank]) {
-      await helper.fellowship.collective.vote(member, referendumIndex, true);
-    }
-  }
-}
-
-export function dummyProposalCall(helper: UniqueHelper) {
-  return helper.constructApiCall('api.tx.system.remark', ['dummy proposal' + (new Date()).getTime()]);
-}
-
-export function dummyProposal(helper: UniqueHelper) {
-  return {
-    Inline: dummyProposalCall(helper).method.toHex(),
-  };
-}
deletedjs-packages/tests/nesting/collectionProperties.seqtest.tsdiffbeforeafterboth
--- a/js-packages/tests/nesting/collectionProperties.seqtest.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util/index.js';
-
-describe('Integration Test: Collection Properties with sudo', () => {
-  let superuser: IKeyringPair;
-  let alice: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      superuser = await privateKey('//Alice');
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([100n], donor);
-    });
-  });
-
-  [
-    {mode: 'nft' as const, requiredPallets: []},
-    {mode: 'ft' as const, requiredPallets: []},
-    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
-  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
-    before(async function() {
-      // eslint-disable-next-line require-await
-      await usingPlaygrounds(async helper => {
-        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
-      });
-    });
-
-    itSub('Repairing an unbroken collection\'s properties preserves the consumed space', async({helper}) => {
-      const properties = [
-        {key: 'sea-creatures', value: 'mermaids'},
-        {key: 'goldenratio', value: '1.6180339887498948482045868343656381177203091798057628621354486227052604628189'},
-      ];
-      const collection = await helper[testSuite.mode].mintCollection(alice, {properties});
-
-      const newProperty = {key: 'space', value: ' '.repeat(4096)};
-      await collection.setProperties(alice, [newProperty]);
-      const originalSpace = await collection.getPropertiesConsumedSpace();
-      expect(originalSpace).to.be.equal(sizeOfProperty(properties[0]) + sizeOfProperty(properties[1]) + sizeOfProperty(newProperty));
-
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairCollection', [collection.collectionId], true);
-      const recomputedSpace = await collection.getPropertiesConsumedSpace();
-      expect(recomputedSpace).to.be.equal(originalSpace);
-    });
-  }));
-});
deletedjs-packages/tests/nesting/collectionProperties.test.tsdiffbeforeafterboth
--- a/js-packages/tests/nesting/collectionProperties.test.ts
+++ /dev/null
@@ -1,326 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util/index.js';
-
-describe('Integration Test: Collection Properties', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob] = await helper.arrange.createAccounts([200n, 10n], donor);
-    });
-  });
-
-  itSub('Properties are initially empty', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice);
-    expect(await collection.getProperties()).to.be.empty;
-  });
-
-  [
-    {mode: 'nft' as const, requiredPallets: []},
-    {mode: 'ft' as const, requiredPallets: []},
-    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
-  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
-    before(async function() {
-      // eslint-disable-next-line require-await
-      await usingPlaygrounds(async helper => {
-        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
-      });
-    });
-
-    itSub('Sets properties for a collection', async ({helper}) =>  {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      // As owner
-      await expect(collection.setProperties(alice, [{key: 'electron', value: 'come bond'}])).to.be.fulfilled;
-
-      await collection.addAdmin(alice, {Substrate: bob.address});
-
-      // As administrator
-      await expect(collection.setProperties(bob, [{key: 'black_hole'}])).to.be.fulfilled;
-
-      const properties = await collection.getProperties();
-      expect(properties).to.include.deep.members([
-        {key: 'electron', value: 'come bond'},
-        {key: 'black_hole', value: ''},
-      ]);
-    });
-
-    itSub('Check valid names for collection properties keys', async ({helper}) =>  {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      // alpha symbols
-      await expect(collection.setProperties(alice, [{key: 'answer'}])).to.be.fulfilled;
-
-      // numeric symbols
-      await expect(collection.setProperties(alice, [{key: '451'}])).to.be.fulfilled;
-
-      // underscore symbol
-      await expect(collection.setProperties(alice, [{key: 'black_hole'}])).to.be.fulfilled;
-
-      // dash symbol
-      await expect(collection.setProperties(alice, [{key: '-'}])).to.be.fulfilled;
-
-      // dot symbol
-      await expect(collection.setProperties(alice, [{key: 'once.in.a.long.long.while...', value: 'you get a little lost'}])).to.be.fulfilled;
-
-      const properties = await collection.getProperties();
-      expect(properties).to.include.deep.members([
-        {key: 'answer', value: ''},
-        {key: '451', value: ''},
-        {key: 'black_hole', value: ''},
-        {key: '-', value: ''},
-        {key: 'once.in.a.long.long.while...', value: 'you get a little lost'},
-      ]);
-    });
-
-    itSub('Changes properties of a collection', async ({helper}) =>  {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      await expect(collection.setProperties(alice, [{key: 'electron', value: 'come bond'}, {key: 'black_hole', value: ''}])).to.be.fulfilled;
-
-      // Mutate the properties
-      await expect(collection.setProperties(alice, [{key: 'black_hole', value: 'LIGO'}])).to.be.fulfilled;
-
-      const properties = await collection.getProperties();
-      expect(properties).to.include.deep.members([
-        {key: 'electron', value: 'come bond'},
-        {key: 'black_hole', value: 'LIGO'},
-      ]);
-    });
-
-    itSub('Deletes properties of a collection', async ({helper}) =>  {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      await expect(collection.setProperties(alice, [{key: 'electron', value: 'come bond'}, {key: 'black_hole', value: 'LIGO'}])).to.be.fulfilled;
-
-      await expect(collection.deleteProperties(alice, ['electron'])).to.be.fulfilled;
-
-      const properties = await collection.getProperties(['black_hole', 'electron']);
-      expect(properties).to.be.deep.equal([
-        {key: 'black_hole', value: 'LIGO'},
-      ]);
-    });
-
-    itSub('Allows modifying a collection property multiple times with the same size', async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      const maxCollectionPropertiesSize = 40960;
-
-      const propDataSize = 4096;
-
-      let propDataChar = 'a';
-      const makeNewPropData = () => {
-        propDataChar = String.fromCharCode(propDataChar.charCodeAt(0) + 1);
-        return `${propDataChar}`.repeat(propDataSize);
-      };
-
-      const property = {key: propKey, value: makeNewPropData()};
-      await collection.setProperties(alice, [property]);
-      const originalSpace = await collection.getPropertiesConsumedSpace();
-      expect(originalSpace).to.be.equal(sizeOfProperty(property));
-
-      const sameSizePropertiesPossibleNum = maxCollectionPropertiesSize / propDataSize;
-
-      // It is possible to modify a property as many times as needed.
-      // It will not consume any additional space.
-      for(let i = 0; i < sameSizePropertiesPossibleNum + 1; i++) {
-        await collection.setProperties(alice, [{key: propKey, value: makeNewPropData()}]);
-        const consumedSpace = await collection.getPropertiesConsumedSpace();
-        expect(consumedSpace).to.be.equal(originalSpace);
-      }
-    });
-
-    itSub('Adding then removing a collection property doesn\'t change the consumed space', async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-      const originalSpace = await collection.getPropertiesConsumedSpace();
-
-      const propDataSize = 4096;
-      const propData = 'a'.repeat(propDataSize);
-
-      const property = {key: propKey, value: propData};
-      await collection.setProperties(alice, [property]);
-      let consumedSpace = await collection.getPropertiesConsumedSpace();
-      expect(consumedSpace).to.be.equal(sizeOfProperty(property));
-
-      await collection.deleteProperties(alice, [propKey]);
-      consumedSpace = await collection.getPropertiesConsumedSpace();
-      expect(consumedSpace).to.be.equal(originalSpace);
-    });
-
-    itSub('Modifying a collection property with different sizes correctly changes the consumed space', async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-      const originalSpace = await collection.getPropertiesConsumedSpace();
-
-      const initProp = {key: propKey, value: 'a'.repeat(4096)};
-      const biggerProp = {key: propKey, value: 'b'.repeat(5000)};
-      const smallerProp = {key: propKey, value: 'c'.repeat(4000)};
-
-      let consumedSpace;
-      let expectedConsumedSpaceDiff;
-
-      await collection.setProperties(alice, [initProp]);
-      consumedSpace = await collection.getPropertiesConsumedSpace();
-      expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace;
-      expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);
-
-      await collection.setProperties(alice, [biggerProp]);
-      consumedSpace = await collection.getPropertiesConsumedSpace();
-      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp);
-      expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff);
-
-      await collection.setProperties(alice, [smallerProp]);
-      consumedSpace = await collection.getPropertiesConsumedSpace();
-      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp);
-      expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff);
-    });
-  }));
-});
-
-describe('Negative Integration Test: Collection Properties', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob] = await helper.arrange.createAccounts([1000n, 100n], donor);
-    });
-  });
-
-  [
-    {mode: 'nft' as const, requiredPallets: []},
-    {mode: 'ft' as const, requiredPallets: []},
-    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
-  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
-    before(async function() {
-      // eslint-disable-next-line require-await
-      await usingPlaygrounds(async helper => {
-        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
-      });
-    });
-
-    itSub('Fails to set properties in a collection if not its onwer/administrator', async ({helper}) =>  {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      await expect(collection.setProperties(bob, [{key: 'electron', value: 'come bond'}, {key: 'black_hole', value: 'LIGO'}]))
-        .to.be.rejectedWith(/common\.NoPermission/);
-
-      expect(await collection.getProperties()).to.be.empty;
-    });
-
-    itSub('Fails to set properties that exceed the limits', async ({helper}) =>  {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      const spaceLimit = (helper.getApi().consts.unique.maxCollectionPropertiesSize as any).toNumber();
-
-      // Mute the general tx parsing error, too many bytes to process
-      {
-        console.error = () => {};
-        await expect(collection.setProperties(alice, [
-          {key: 'electron', value: 'low high '.repeat(Math.ceil(spaceLimit! / 9))},
-        ])).to.be.rejected;
-      }
-
-      expect(await collection.getProperties(['electron'])).to.be.empty;
-
-      await expect(collection.setProperties(alice, [
-        {key: 'electron', value: 'low high '.repeat(Math.ceil(spaceLimit! / 18))},
-        {key: 'black_hole', value: '0'.repeat(Math.ceil(spaceLimit! / 2))},
-      ])).to.be.rejectedWith(/common\.NoSpaceForProperty/);
-
-      expect(await collection.getProperties(['electron', 'black_hole'])).to.be.empty;
-    });
-
-    itSub('Fails to set more properties than it is allowed', async ({helper}) =>  {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      const propertiesToBeSet = [];
-      for(let i = 0; i < 65; i++) {
-        propertiesToBeSet.push({
-          key: 'electron_' + i,
-          value: Math.random() > 0.5 ? 'high' : 'low',
-        });
-      }
-
-      await expect(collection.setProperties(alice, propertiesToBeSet)).
-        to.be.rejectedWith(/common\.PropertyLimitReached/);
-
-      expect(await collection.getProperties()).to.be.empty;
-    });
-
-    itSub('Fails to set properties with invalid names', async ({helper}) => {
-      const collection = await helper[testSuite.mode].mintCollection(alice);
-
-      const invalidProperties = [
-        [{key: 'electron', value: 'negative'}, {key: 'string theory', value: 'understandable'}],
-        [{key: 'Mr/Sandman', value: 'Bring me a gene'}],
-        [{key: 'déjà vu', value: 'hmm...'}],
-      ];
-
-      for(let i = 0; i < invalidProperties.length; i++) {
-        await expect(
-          collection.setProperties(alice, invalidProperties[i]),
-          `on rejecting the new badly-named property #${i}`,
-        ).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
-      }
-
-      await expect(
-        collection.setProperties(alice, [{key: '', value: 'nothing must not exist'}]),
-        'on rejecting an unnamed property',
-      ).to.be.rejectedWith(/common\.EmptyPropertyKey/);
-
-      await expect(
-        collection.setProperties(alice, [{key: 'CRISPR-Cas9', value: 'rewriting nature!'}]),
-        'on setting the correctly-but-still-badly-named property',
-      ).to.be.fulfilled;
-
-      const keys = invalidProperties.flatMap(propertySet => propertySet.map(property => property.key)).concat('CRISPR-Cas9').concat('');
-
-      const properties = await collection.getProperties(keys);
-      expect(properties).to.be.deep.equal([
-        {key: 'CRISPR-Cas9', value: 'rewriting nature!'},
-      ]);
-
-      for(let i = 0; i < invalidProperties.length; i++) {
-        await expect(
-          collection.deleteProperties(alice, invalidProperties[i].map(propertySet => propertySet.key)),
-          `on trying to delete the non-existent badly-named property #${i}`,
-        ).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
-      }
-    });
-
-    itSub('Forbids to repair a collection if called with non-sudo', async({helper}) => {
-      const collection = await helper[testSuite.mode].mintCollection(alice, {properties: [
-        {key: 'sea-creatures', value: 'mermaids'},
-        {key: 'goldenratio', value: '1.6180339887498948482045868343656381177203091798057628621354486227052604628189'},
-      ]});
-
-      await expect(helper.executeExtrinsic(alice, 'api.tx.unique.forceRepairCollection', [collection.collectionId], true))
-        .to.be.rejectedWith(/BadOrigin/);
-    });
-  }));
-});
deletedjs-packages/tests/nesting/graphs.test.tsdiffbeforeafterboth
--- a/js-packages/tests/nesting/graphs.test.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, usingPlaygrounds} from '../util/index.js';
-import {UniqueHelper, UniqueNFTCollection, UniqueNFToken} from '@unique/playgrounds/unique.js';
-
-/**
- * ```dot
- * 4 -> 3 -> 2 -> 1
- * 7 -> 6 -> 5 -> 2
- * 8 -> 5
- * ```
- */
-async function buildComplexObjectGraph(helper: UniqueHelper, sender: IKeyringPair): Promise<[UniqueNFTCollection,UniqueNFToken[]]> {
-  const collection = await helper.nft.mintCollection(sender, {permissions: {nesting: {tokenOwner: true}}});
-  const tokens = await collection.mintMultipleTokens(sender, Array(8).fill({owner: {Substrate: sender.address}}));
-
-  await tokens[7].nest(sender, tokens[4]);
-  await tokens[6].nest(sender, tokens[5]);
-  await tokens[5].nest(sender, tokens[4]);
-  await tokens[4].nest(sender, tokens[1]);
-  await tokens[3].nest(sender, tokens[2]);
-  await tokens[2].nest(sender, tokens[1]);
-  await tokens[1].nest(sender, tokens[0]);
-
-  return [collection, tokens];
-}
-
-describe('Graphs', () => {
-  let alice: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([10n], donor);
-    });
-  });
-
-  itSub('Ouroboros can\'t be created in a complex graph', async ({helper}) => {
-    const [collection, tokens] = await buildComplexObjectGraph(helper, alice);
-
-    await collection.setPermissions(alice, {nesting: {collectionAdmin: false, tokenOwner: true}});
-
-    // [token owner] to self
-    await expect(
-      tokens[0].nest(alice, tokens[0]),
-      '[token owner] self-nesting is forbidden',
-    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
-    // [token owner] to nested part of graph
-    await expect(
-      tokens[0].nest(alice, tokens[4]),
-      '[token owner] cannot nest the root node into an internal node',
-    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
-    await expect(
-      tokens[1].transferFrom(alice, tokens[0].nestingAccount(), tokens[7].nestingAccount()),
-      '[token owner] cannot nest higher internal node into lower internal node',
-    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
-
-    await collection.setPermissions(alice, {nesting: {collectionAdmin: true, tokenOwner: false}});
-
-    // [collection owner] to self
-    await expect(
-      tokens[0].nest(alice, tokens[0]),
-      '[collection owner] self-nesting is forbidden',
-    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
-    // [collection owner] to nested part of graph
-    await expect(
-      tokens[0].nest(alice, tokens[4]),
-      '[collection owner] cannot nest the root node into an internal node',
-    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
-  });
-});
deletedjs-packages/tests/nesting/propertyPermissions.test.tsdiffbeforeafterboth
--- a/js-packages/tests/nesting/propertyPermissions.test.ts
+++ /dev/null
@@ -1,198 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect} from '../util/index.js';
-import {UniqueNFTCollection, UniqueRFTCollection} from '@unique/playgrounds/unique.js';
-
-describe('Integration Test: Access Rights to Token Properties', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor);
-    });
-  });
-
-  itSub('Reads access rights to properties of a collection', async ({helper}) =>  {
-    const collection = await helper.nft.mintCollection(alice);
-    const propertyRights = (await helper.callRpc('api.query.common.collectionPropertyPermissions', [collection.collectionId])).toJSON();
-    expect(propertyRights).to.be.empty;
-  });
-
-  async function testSetsAccessRightsToProperties(collection: UniqueNFTCollection | UniqueRFTCollection) {
-    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: true}}]))
-      .to.be.fulfilled;
-
-    await collection.addAdmin(alice, {Substrate: bob.address});
-
-    await expect(collection.setTokenPropertyPermissions(bob, [{key: 'mindgame', permission: {collectionAdmin: true, tokenOwner: false}}]))
-      .to.be.fulfilled;
-
-    const propertyRights = await collection.getPropertyPermissions(['skullduggery', 'mindgame']);
-    expect(propertyRights).to.include.deep.members([
-      {key: 'skullduggery', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}},
-      {key: 'mindgame', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}},
-    ]);
-  }
-
-  itSub('Sets access rights to properties of a collection (NFT)', async ({helper}) =>  {
-    await testSetsAccessRightsToProperties(await helper.nft.mintCollection(alice));
-  });
-
-  itSub.ifWithPallets('Sets access rights to properties of a collection (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    await testSetsAccessRightsToProperties(await helper.rft.mintCollection(alice));
-  });
-
-  async function testChangesAccessRightsToProperty(collection: UniqueNFTCollection | UniqueRFTCollection) {
-    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: true, collectionAdmin: true}}]))
-      .to.be.fulfilled;
-
-    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]))
-      .to.be.fulfilled;
-
-    const propertyRights = await collection.getPropertyPermissions();
-    expect(propertyRights).to.be.deep.equal([
-      {key: 'skullduggery', permission: {'mutable': false, 'collectionAdmin': false, 'tokenOwner': true}},
-    ]);
-  }
-
-  itSub('Changes access rights to properties of a NFT collection', async ({helper}) =>  {
-    await testChangesAccessRightsToProperty(await helper.nft.mintCollection(alice));
-  });
-
-  itSub.ifWithPallets('Changes access rights to properties of a ReFungible collection', [Pallets.ReFungible], async ({helper}) => {
-    await testChangesAccessRightsToProperty(await helper.rft.mintCollection(alice));
-  });
-});
-
-describe('Negative Integration Test: Access Rights to Token Properties', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
-    });
-  });
-
-  async function testPreventsFromSettingAccessRightsNotAdminOrOwner(collection: UniqueNFTCollection | UniqueRFTCollection) {
-    await expect(collection.setTokenPropertyPermissions(bob, [{key: 'skullduggery', permission: {mutable: true, tokenOwner: true}}]))
-      .to.be.rejectedWith(/common\.NoPermission/);
-
-    const propertyRights = await collection.getPropertyPermissions(['skullduggery']);
-    expect(propertyRights).to.be.empty;
-  }
-
-  itSub('Prevents from setting access rights to properties of a NFT collection if not an onwer/admin', async ({helper}) =>  {
-    await testPreventsFromSettingAccessRightsNotAdminOrOwner(await helper.nft.mintCollection(alice));
-  });
-
-  itSub.ifWithPallets('Prevents from setting access rights to properties of a ReFungible collection if not an onwer/admin', [Pallets.ReFungible], async ({helper}) => {
-    await testPreventsFromSettingAccessRightsNotAdminOrOwner(await helper.rft.mintCollection(alice));
-  });
-
-  async function testPreventFromAddingTooManyPossibleProperties(collection: UniqueNFTCollection | UniqueRFTCollection) {
-    const constitution = [];
-    for(let i = 0; i < 65; i++) {
-      constitution.push({
-        key: 'property_' + i,
-        permission: Math.random() > 0.5 ? {mutable: true, collectionAdmin: true, tokenOwner: true} : {},
-      });
-    }
-
-    await expect(collection.setTokenPropertyPermissions(alice, constitution))
-      .to.be.rejectedWith(/common\.PropertyLimitReached/);
-
-    const propertyRights = await collection.getPropertyPermissions();
-    expect(propertyRights).to.be.empty;
-  }
-
-  itSub('Prevents from adding too many possible properties (NFT)', async ({helper}) =>  {
-    await testPreventFromAddingTooManyPossibleProperties(await helper.nft.mintCollection(alice));
-  });
-
-  itSub.ifWithPallets('Prevents from adding too many possible properties (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    await testPreventFromAddingTooManyPossibleProperties(await helper.rft.mintCollection(alice));
-  });
-
-  async function testPreventAccessRightsModifiedIfConstant(collection: UniqueNFTCollection | UniqueRFTCollection) {
-    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]))
-      .to.be.fulfilled;
-
-    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {collectionAdmin: true}}]))
-      .to.be.rejectedWith(/common\.NoPermission/);
-
-    const propertyRights = await collection.getPropertyPermissions(['skullduggery']);
-    expect(propertyRights).to.deep.equal([
-      {key: 'skullduggery', permission: {'mutable': false, 'collectionAdmin': false, 'tokenOwner': true}},
-    ]);
-  }
-
-  itSub('Prevents access rights to be modified if constant (NFT)', async ({helper}) =>  {
-    await testPreventAccessRightsModifiedIfConstant(await helper.nft.mintCollection(alice));
-  });
-
-  itSub.ifWithPallets('Prevents access rights to be modified if constant (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    await testPreventAccessRightsModifiedIfConstant(await helper.rft.mintCollection(alice));
-  });
-
-  async function testPreventsAddingPropertiesWithInvalidNames(collection: UniqueNFTCollection | UniqueRFTCollection) {
-    const invalidProperties = [
-      [{key: 'skullduggery', permission: {tokenOwner: true}}, {key: 'im possible', permission: {collectionAdmin: true}}],
-      [{key: 'G#4', permission: {tokenOwner: true}}],
-      [{key: 'HÆMILTON', permission: {mutable: false, collectionAdmin: true, tokenOwner: true}}],
-    ];
-
-    for(let i = 0; i < invalidProperties.length; i++) {
-      await expect(
-        collection.setTokenPropertyPermissions(alice, invalidProperties[i]),
-        `on setting the new badly-named property #${i}`,
-      ).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
-    }
-
-    await expect(
-      collection.setTokenPropertyPermissions(alice, [{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(
-      collection.setTokenPropertyPermissions(alice, [
-        {key: correctKey, permission: {collectionAdmin: true}},
-      ]),
-      'on setting the correctly-but-still-badly-named property',
-    ).to.be.fulfilled;
-
-    const keys = invalidProperties.flatMap(propertySet => propertySet.map(property => property.key)).concat(correctKey).concat('');
-
-    const propertyRights = await collection.getPropertyPermissions(keys);
-    expect(propertyRights).to.be.deep.equal([
-      {key: correctKey, permission: {mutable: false, collectionAdmin: true, tokenOwner: false}},
-    ]);
-  }
-
-  itSub('Prevents adding properties with invalid names (NFT)', async ({helper}) =>  {
-    await testPreventsAddingPropertiesWithInvalidNames(await helper.nft.mintCollection(alice));
-  });
-
-  itSub.ifWithPallets('Prevents adding properties with invalid names (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    await testPreventsAddingPropertiesWithInvalidNames(await helper.rft.mintCollection(alice));
-  });
-});
deletedjs-packages/tests/nesting/tokenProperties.seqtest.tsdiffbeforeafterboth
--- a/js-packages/tests/nesting/tokenProperties.seqtest.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../util/index.js';
-
-describe('Integration Test: Token Properties with sudo', () => {
-  let superuser: IKeyringPair;
-  let alice: IKeyringPair; // collection owner
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      superuser = await privateKey('//Alice');
-      const donor = await privateKey({url: import.meta.url});
-      [alice] = await helper.arrange.createAccounts([100n], donor);
-    });
-  });
-
-  [
-    {mode: 'nft' as const, pieces: undefined, requiredPallets: []} as const,
-    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]} as const,
-  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
-    before(async function() {
-      // eslint-disable-next-line require-await
-      await usingPlaygrounds(async helper => {
-        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
-      });
-    });
-
-    itSub('force_repair_item preserves valid consumed space', async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testSuite.mode].mintCollection(alice, {
-        tokenPropertyPermissions: [
-          {
-            key: propKey,
-            permission: {mutable: true, tokenOwner: true},
-          },
-        ],
-      });
-      const token = await (
-        testSuite.pieces
-          ? collection.mintToken(alice, testSuite.pieces as any)
-          : collection.mintToken(alice)
-      );
-
-      const prop = {key: propKey, value: 'a'.repeat(4096)};
-
-      await token.setProperties(alice, [prop]);
-      const originalSpace = await token.getTokenPropertiesConsumedSpace();
-      expect(originalSpace).to.be.equal(sizeOfProperty(prop));
-
-      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairItem', [token.collectionId, token.tokenId], true);
-      const recomputedSpace = await token.getTokenPropertiesConsumedSpace();
-      expect(recomputedSpace).to.be.equal(originalSpace);
-    });
-  }));
-});
deletedjs-packages/tests/nesting/tokenProperties.test.tsdiffbeforeafterboth
--- a/js-packages/tests/nesting/tokenProperties.test.ts
+++ /dev/null
@@ -1,816 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect, sizeOfProperty} from '../util/index.js';
-import {UniqueHelper, UniqueNFToken, UniqueRFToken} from '@unique/playgrounds/unique.js';
-
-describe('Integration Test: Token Properties', () => {
-  let alice: IKeyringPair; // collection owner
-  let bob: IKeyringPair; // collection admin
-  let charlie: IKeyringPair; // token owner
-
-  let permissions: {permission: any, signers: IKeyringPair[]}[];
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob, charlie] = await helper.arrange.createAccounts([200n, 100n, 100n], donor);
-    });
-
-    permissions = [
-      {permission: {mutable: true, collectionAdmin: true}, signers: [alice, bob]},
-      {permission: {mutable: false, collectionAdmin: true}, signers: [alice, bob]},
-      {permission: {mutable: true, tokenOwner: true}, signers: [charlie]},
-      {permission: {mutable: false, tokenOwner: true}, signers: [charlie]},
-      {permission: {mutable: true, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie]},
-      {permission: {mutable: false, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie]},
-    ];
-  });
-
-  async function mintCollectionWithAllPermissionsAndToken(helper: UniqueHelper, mode: 'NFT' | 'RFT'): Promise<[UniqueNFToken | UniqueRFToken, bigint]> {
-    const collection = await (mode == 'NFT' ? helper.nft : helper.rft).mintCollection(alice, {
-      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
-        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
-    });
-    return mode == 'NFT' ? [await collection.mintToken(alice), 1n] : [await collection.mintToken(alice, 100n as any), 100n];
-  }
-
-  async function testReadsYetEmptyProperties(token: UniqueNFToken | UniqueRFToken) {
-    const properties = await token.getProperties();
-    expect(properties).to.be.empty;
-
-    const tokenData = await token.getData();
-    expect(tokenData!.properties).to.be.empty;
-  }
-
-  itSub('Reads yet empty properties of a token (NFT)', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice);
-    const token = await collection.mintToken(alice);
-    await testReadsYetEmptyProperties(token);
-  });
-
-  itSub.ifWithPallets('Reads yet empty properties of a token (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const collection = await helper.rft.mintCollection(alice);
-    const token = await collection.mintToken(alice);
-    await testReadsYetEmptyProperties(token);
-  });
-
-  async function testAssignPropertiesAccordingToPermissions(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
-    await token.collection.addAdmin(alice, {Substrate: bob.address});
-    await token.transfer(alice, {Substrate: charlie.address}, pieces);
-
-    const propertyKeys: string[] = [];
-    let i = 0;
-    for(const permission of permissions) {
-      i++;
-      let j = 0;
-      for(const signer of permission.signers) {
-        j++;
-        const key = i + '_' + signer.address;
-        propertyKeys.push(key);
-
-        await expect(
-          token.setProperties(signer, [{key: key, value: 'Serotonin increase'}]),
-          `on adding property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-      }
-    }
-
-    const properties = await token.getProperties(propertyKeys);
-    const tokenData = await token.getData();
-    for(let i = 0; i < properties.length; i++) {
-      expect(properties[i].value).to.be.equal('Serotonin increase');
-      expect(tokenData!.properties[i].value).to.be.equal('Serotonin increase');
-    }
-  }
-
-  itSub('Assigns properties to a token according to permissions (NFT)', async ({helper}) =>  {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
-    await testAssignPropertiesAccordingToPermissions(token, amount);
-  });
-
-  itSub.ifWithPallets('Assigns properties to a token according to permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
-    await testAssignPropertiesAccordingToPermissions(token, amount);
-  });
-
-  async function testChangesPropertiesAccordingPermission(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
-    await token.collection.addAdmin(alice, {Substrate: bob.address});
-    await token.transfer(alice, {Substrate: charlie.address}, pieces);
-
-    const propertyKeys: string[] = [];
-    let i = 0;
-    for(const permission of permissions) {
-      i++;
-      if(!permission.permission.mutable) continue;
-
-      let j = 0;
-      for(const signer of permission.signers) {
-        j++;
-        const key = i + '_' + signer.address;
-        propertyKeys.push(key);
-
-        await expect(
-          token.setProperties(signer, [{key, value: 'Serotonin increase'}]),
-          `on adding property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-
-        await expect(
-          token.setProperties(signer, [{key, value: 'Serotonin stable'}]),
-          `on changing property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-      }
-    }
-
-    const properties = await token.getProperties(propertyKeys);
-    const tokenData = await token.getData();
-    for(let i = 0; i < properties.length; i++) {
-      expect(properties[i].value).to.be.equal('Serotonin stable');
-      expect(tokenData!.properties[i].value).to.be.equal('Serotonin stable');
-    }
-  }
-
-  itSub('Changes properties of a token according to permissions (NFT)', async ({helper}) =>  {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
-    await testChangesPropertiesAccordingPermission(token, amount);
-  });
-
-  itSub.ifWithPallets('Changes properties of a token according to permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
-    await testChangesPropertiesAccordingPermission(token, amount);
-  });
-
-  async function testDeletePropertiesAccordingPermission(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
-    await token.collection.addAdmin(alice, {Substrate: bob.address});
-    await token.transfer(alice, {Substrate: charlie.address}, pieces);
-
-    const propertyKeys: string[] = [];
-    let i = 0;
-
-    for(const permission of permissions) {
-      i++;
-      if(!permission.permission.mutable) continue;
-
-      let j = 0;
-      for(const signer of permission.signers) {
-        j++;
-        const key = i + '_' + signer.address;
-        propertyKeys.push(key);
-
-        await expect(
-          token.setProperties(signer, [{key, value: 'Serotonin increase'}]),
-          `on adding property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-
-        await expect(
-          token.deleteProperties(signer, [key]),
-          `on deleting property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-      }
-    }
-
-    expect(await token.getProperties(propertyKeys)).to.be.empty;
-    expect((await token.getData())!.properties).to.be.empty;
-  }
-
-  itSub('Deletes properties of a token according to permissions (NFT)', async ({helper}) =>  {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
-    await testDeletePropertiesAccordingPermission(token, amount);
-  });
-
-  itSub.ifWithPallets('Deletes properties of a token according to permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
-    await testDeletePropertiesAccordingPermission(token, amount);
-  });
-
-  itSub('Assigns properties to a nested token according to permissions', async ({helper}) =>  {
-    const collectionA = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const collectionB = await helper.nft.mintCollection(alice, {
-      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
-        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
-    });
-    const targetToken = await collectionA.mintToken(alice);
-    const nestedToken = await collectionB.mintToken(alice, targetToken.nestingAccount());
-
-    await collectionB.addAdmin(alice, {Substrate: bob.address});
-    await targetToken.transfer(alice, {Substrate: charlie.address});
-
-    const propertyKeys: string[] = [];
-    let i = 0;
-    for(const permission of permissions) {
-      i++;
-      let j = 0;
-      for(const signer of permission.signers) {
-        j++;
-        const key = i + '_' + signer.address;
-        propertyKeys.push(key);
-
-        await expect(
-          nestedToken.setProperties(signer, [{key, value: 'Serotonin increase'}]),
-          `on adding property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-      }
-    }
-
-    const properties = await nestedToken.getProperties(propertyKeys);
-    const tokenData = await nestedToken.getData();
-    for(let i = 0; i < properties.length; i++) {
-      expect(properties[i].value).to.be.equal('Serotonin increase');
-      expect(tokenData!.properties[i].value).to.be.equal('Serotonin increase');
-    }
-    expect(await targetToken.getProperties()).to.be.empty;
-  });
-
-  itSub('Changes properties of a nested token according to permissions', async ({helper}) =>  {
-    const collectionA = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const collectionB = await helper.nft.mintCollection(alice, {
-      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
-        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
-    });
-    const targetToken = await collectionA.mintToken(alice);
-    const nestedToken = await collectionB.mintToken(alice, targetToken.nestingAccount());
-
-    await collectionB.addAdmin(alice, {Substrate: bob.address});
-    await targetToken.transfer(alice, {Substrate: charlie.address});
-
-    const propertyKeys: string[] = [];
-    let i = 0;
-    for(const permission of permissions) {
-      i++;
-      if(!permission.permission.mutable) continue;
-
-      let j = 0;
-      for(const signer of permission.signers) {
-        j++;
-        const key = i + '_' + signer.address;
-        propertyKeys.push(key);
-
-        await expect(
-          nestedToken.setProperties(signer, [{key, value: 'Serotonin increase'}]),
-          `on adding property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-
-        await expect(
-          nestedToken.setProperties(signer, [{key, value: 'Serotonin stable'}]),
-          `on changing property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-      }
-    }
-
-    const properties = await nestedToken.getProperties(propertyKeys);
-    const tokenData = await nestedToken.getData();
-    for(let i = 0; i < properties.length; i++) {
-      expect(properties[i].value).to.be.equal('Serotonin stable');
-      expect(tokenData!.properties[i].value).to.be.equal('Serotonin stable');
-    }
-    expect(await targetToken.getProperties()).to.be.empty;
-  });
-
-  itSub('Deletes properties of a nested token according to permissions', async ({helper}) =>  {
-    const collectionA = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const collectionB = await helper.nft.mintCollection(alice, {
-      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
-        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
-    });
-    const targetToken = await collectionA.mintToken(alice);
-    const nestedToken = await collectionB.mintToken(alice, targetToken.nestingAccount());
-
-    await collectionB.addAdmin(alice, {Substrate: bob.address});
-    await targetToken.transfer(alice, {Substrate: charlie.address});
-
-    const propertyKeys: string[] = [];
-    let i = 0;
-    for(const permission of permissions) {
-      i++;
-      if(!permission.permission.mutable) continue;
-
-      let j = 0;
-      for(const signer of permission.signers) {
-        j++;
-        const key = i + '_' + signer.address;
-        propertyKeys.push(key);
-
-        await expect(
-          nestedToken.setProperties(signer, [{key, value: 'Serotonin increase'}]),
-          `on adding property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-
-        await expect(
-          nestedToken.deleteProperties(signer, [key]),
-          `on deleting property #${i} by signer #${j}`,
-        ).to.be.fulfilled;
-      }
-    }
-
-    expect(await nestedToken.getProperties(propertyKeys)).to.be.empty;
-    expect((await nestedToken.getData())!.properties).to.be.empty;
-    expect(await targetToken.getProperties()).to.be.empty;
-  });
-
-  [
-    {mode: 'nft' as const, storage: 'nonfungible' as const, pieces: undefined, requiredPallets: []} as const,
-    {mode: 'rft' as const, storage: 'refungible' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]} as const,
-  ].map(testCase =>
-    itSub.ifWithPallets(`Allows modifying a token property multiple times with the same size (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testCase.mode].mintCollection(alice, {
-        tokenPropertyPermissions: [
-          {
-            key: propKey,
-            permission: {mutable: true, tokenOwner: true},
-          },
-        ],
-      });
-
-      const maxTokenPropertiesSize = 32768;
-
-      const propDataSize = 4096;
-
-      let propDataChar = 'a';
-      const makeNewPropData = () => {
-        propDataChar = String.fromCharCode(propDataChar.charCodeAt(0) + 1);
-        return `${propDataChar}`.repeat(propDataSize);
-      };
-
-      const token = await (
-        testCase.pieces
-          ? collection.mintToken(alice, testCase.pieces as any)
-          : collection.mintToken(alice)
-      );
-
-      const property = {key: propKey, value: makeNewPropData()};
-      await token.setProperties(alice, [property]);
-      const originalSpace = await token.getTokenPropertiesConsumedSpace();
-      expect(originalSpace).to.be.equal(sizeOfProperty(property));
-
-      const sameSizePropertiesPossibleNum = maxTokenPropertiesSize / propDataSize;
-
-      // It is possible to modify a property as many times as needed.
-      // It will not consume any additional space.
-      for(let i = 0; i < sameSizePropertiesPossibleNum + 1; i++) {
-        await token.setProperties(alice, [{key: propKey, value: makeNewPropData()}]);
-        const consumedSpace = await token.getTokenPropertiesConsumedSpace();
-        expect(consumedSpace).to.be.equal(originalSpace);
-      }
-    }));
-
-  [
-    {mode: 'nft' as const, pieces: undefined, requiredPallets: []},
-    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]},
-  ].map(testCase =>
-    itSub.ifWithPallets(`Adding then removing a token property doesn't change the consumed space (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testCase.mode].mintCollection(alice, {
-        tokenPropertyPermissions: [
-          {
-            key: propKey,
-            permission: {mutable: true, tokenOwner: true},
-          },
-        ],
-      });
-      const token = await (
-        testCase.pieces
-          ? collection.mintToken(alice, testCase.pieces as any)
-          : collection.mintToken(alice)
-      );
-      const originalSpace = await token.getTokenPropertiesConsumedSpace();
-
-      const propDataSize = 4096;
-      const propData = 'a'.repeat(propDataSize);
-
-      const property = {key: propKey, value: propData};
-      await token.setProperties(alice, [property]);
-      let consumedSpace = await token.getTokenPropertiesConsumedSpace();
-      expect(consumedSpace).to.be.equal(sizeOfProperty(property));
-
-      await token.deleteProperties(alice, [propKey]);
-      consumedSpace = await token.getTokenPropertiesConsumedSpace();
-      expect(consumedSpace).to.be.equal(originalSpace);
-    }));
-
-  [
-    {mode: 'nft' as const, pieces: undefined, requiredPallets: []},
-    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]},
-  ].map(testCase =>
-    itSub.ifWithPallets(`Modifying a token property with different sizes correctly changes the consumed space (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testCase.mode].mintCollection(alice, {
-        tokenPropertyPermissions: [
-          {
-            key: propKey,
-            permission: {mutable: true, tokenOwner: true},
-          },
-        ],
-      });
-      const token = await (
-        testCase.pieces
-          ? collection.mintToken(alice, testCase.pieces as any)
-          : collection.mintToken(alice)
-      );
-      const originalSpace = await token.getTokenPropertiesConsumedSpace();
-
-      const initProp = {key: propKey, value: 'a'.repeat(4096)};
-      const biggerProp = {key: propKey, value: 'b'.repeat(5000)};
-      const smallerProp = {key: propKey, value: 'c'.repeat(4000)};
-
-      let consumedSpace;
-      let expectedConsumedSpaceDiff;
-
-      await token.setProperties(alice, [initProp]);
-      consumedSpace = await token.getTokenPropertiesConsumedSpace();
-      expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace;
-      expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);
-
-      await token.setProperties(alice, [biggerProp]);
-      consumedSpace = await token.getTokenPropertiesConsumedSpace();
-      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp);
-      expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff);
-
-      await token.setProperties(alice, [smallerProp]);
-      consumedSpace = await token.getTokenPropertiesConsumedSpace();
-      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp);
-      expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff);
-    }));
-
-  itSub('Set sponsored properties', async({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {tokenPropertyPermissions: [{key: 'k', permission: {tokenOwner: true}}]});
-
-    await collection.setSponsor(alice, alice.address);
-    await collection.confirmSponsorship(alice);
-    await collection.setPermissions(alice, {access: 'AllowList', mintMode: true});
-    await collection.addToAllowList(alice, {Substrate: bob.address});
-    await collection.setLimits(alice, {sponsoredDataRateLimit: {blocks: 30}});
-
-    const token = await collection.mintToken(alice, {Substrate: bob.address});
-
-    const aliceBalanceBefore = await helper.balance.getSubstrate(alice.address);
-    const bobBalanceBefore = await helper.balance.getSubstrate(bob.address);
-
-    await token.setProperties(bob, [{key: 'k', value: 'val'}]);
-
-    const aliceBalanceAfter = await helper.balance.getSubstrate(alice.address);
-    const bobBalanceAfter = await helper.balance.getSubstrate(bob.address);
-
-    expect(bobBalanceAfter).to.be.equal(bobBalanceBefore);
-    expect(aliceBalanceBefore > aliceBalanceAfter).to.be.true;
-  });
-});
-
-describe('Negative Integration Test: Token Properties', () => {
-  let alice: IKeyringPair; // collection owner
-  let bob: IKeyringPair; // collection admin
-  let charlie: IKeyringPair; // token owner
-
-  let constitution: {permission: any, signers: IKeyringPair[], sinner: IKeyringPair}[];
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      let dave: IKeyringPair;
-      [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
-
-      // todo:playgrounds probably separate these tests later
-      constitution = [
-        {permission: {mutable: true, collectionAdmin: true}, signers: [alice, bob], sinner: charlie},
-        {permission: {mutable: false, collectionAdmin: true}, signers: [alice, bob], sinner: charlie},
-        {permission: {mutable: true, tokenOwner: true}, signers: [charlie], sinner: alice},
-        {permission: {mutable: false, tokenOwner: true}, signers: [charlie], sinner: alice},
-        {permission: {mutable: true, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie], sinner: dave},
-        {permission: {mutable: false, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie], sinner: dave},
-      ];
-    });
-  });
-
-  [
-    {mode: 'nft' as const, requiredPallets: [Pallets.NFT]},
-    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
-  ].map(testCase =>
-    itSub.ifWithPallets(`Forbids adding/deleting properties of a token if token doesn't exist (${testCase.mode.toLocaleUpperCase})`, testCase.requiredPallets, async({helper}) => {
-      const collection = await helper[testCase.mode].mintCollection(alice, {
-        tokenPropertyPermissions: constitution.slice(0, 1).map(({permission}) => ({key: '1', permission})),
-      });
-      const nonExistentToken = collection.getTokenObject(1);
-
-      await expect(
-        nonExistentToken.setProperties(alice, [{key: '1', value: 'Serotonin increase'}]),
-        'on expecting failure whilst adding a property by alice',
-      ).to.be.rejectedWith(/common\.TokenNotFound/);
-
-      await expect(
-        nonExistentToken.deleteProperties(alice, ['1']),
-        'on expecting failure whilst deleting a property by alice',
-      ).to.be.rejectedWith(/common\.TokenNotFound/);
-    }));
-
-  async function mintCollectionWithAllPermissionsAndToken(helper: UniqueHelper, mode: 'NFT' | 'RFT'): Promise<[UniqueNFToken | UniqueRFToken, bigint]> {
-    const collection = await (mode == 'NFT' ? helper.nft : helper.rft).mintCollection(alice, {
-      tokenPropertyPermissions: constitution.map(({permission}, i) => ({key: `${i+1}`, permission})),
-    });
-    return mode == 'NFT' ? [await collection.mintToken(alice), 1n] : [await collection.mintToken(alice, 100n as any), 100n];
-  }
-
-  async function getConsumedSpace(api: any, collectionId: number, tokenId: number, mode: 'NFT' | 'RFT'): Promise<number> {
-    return (await (mode == 'NFT' ? api.query.nonfungible : api.query.refungible).tokenProperties(collectionId, tokenId)).toJSON().consumedSpace;
-  }
-
-  async function prepare(token: UniqueNFToken | UniqueRFToken, pieces: bigint): Promise<number> {
-    await token.collection.addAdmin(alice, {Substrate: bob.address});
-    await token.transfer(alice, {Substrate: charlie.address}, pieces);
-
-    let i = 0;
-    for(const passage of constitution) {
-      i++;
-      const signer = passage.signers[0];
-      await expect(
-        token.setProperties(signer, [{key: `${i}`, value: 'Serotonin increase'}]),
-        `on adding property ${i} by ${signer.address}`,
-      ).to.be.fulfilled;
-    }
-
-    const originalSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
-    return originalSpace;
-  }
-
-  async function testForbidsChangingDeletingPropertiesUserOutsideOfPermissions(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
-    const originalSpace = await prepare(token, pieces);
-
-    let i = 0;
-    for(const forbiddance of constitution) {
-      i++;
-      if(!forbiddance.permission.mutable) continue;
-
-      await expect(
-        token.setProperties(forbiddance.sinner, [{key: `${i}`, value: 'Serotonin down'}]),
-        `on failing to change property ${i} by the malefactor`,
-      ).to.be.rejectedWith(/common\.NoPermission/);
-
-      await expect(
-        token.deleteProperties(forbiddance.sinner, [`${i}`]),
-        `on failing to delete property ${i} by the malefactor`,
-      ).to.be.rejectedWith(/common\.NoPermission/);
-    }
-
-    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
-    expect(consumedSpace).to.be.equal(originalSpace);
-  }
-
-  itSub('Forbids changing/deleting properties of a token if the user is outside of permissions (NFT)', async ({helper}) =>  {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
-    await testForbidsChangingDeletingPropertiesUserOutsideOfPermissions(token, amount);
-  });
-
-  itSub.ifWithPallets('Forbids changing/deleting properties of a token if the user is outside of permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
-    await testForbidsChangingDeletingPropertiesUserOutsideOfPermissions(token, amount);
-  });
-
-  async function testForbidsChangingDeletingPropertiesIfPropertyImmutable(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
-    const originalSpace = await prepare(token, pieces);
-
-    let i = 0;
-    for(const permission of constitution) {
-      i++;
-      if(permission.permission.mutable) continue;
-
-      await expect(
-        token.setProperties(permission.signers[0], [{key: `${i}`, value: 'Serotonin down'}]),
-        `on failing to change property ${i} by signer #0`,
-      ).to.be.rejectedWith(/common\.NoPermission/);
-
-      await expect(
-        token.deleteProperties(permission.signers[0], [i.toString()]),
-        `on failing to delete property ${i} by signer #0`,
-      ).to.be.rejectedWith(/common\.NoPermission/);
-    }
-
-    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
-    expect(consumedSpace).to.be.equal(originalSpace);
-  }
-
-  itSub('Forbids changing/deleting properties of a token if the property is permanent (immutable) (NFT)', async ({helper}) =>  {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
-    await testForbidsChangingDeletingPropertiesIfPropertyImmutable(token, amount);
-  });
-
-  itSub.ifWithPallets('Forbids changing/deleting properties of a token if the property is permanent (immutable) (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
-    await testForbidsChangingDeletingPropertiesIfPropertyImmutable(token, amount);
-  });
-
-  async function testForbidsAddingPropertiesIfPropertyNotDeclared(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
-    const originalSpace = await prepare(token, pieces);
-
-    await expect(
-      token.setProperties(alice, [{key: 'non-existent', value: 'I exist!'}]),
-      'on failing to add a previously non-existent property',
-    ).to.be.rejectedWith(/common\.NoPermission/);
-
-    await expect(
-      token.collection.setTokenPropertyPermissions(alice, [{key: 'now-existent', permission: {}}]),
-      'on setting a new non-permitted property',
-    ).to.be.fulfilled;
-
-    await expect(
-      token.setProperties(alice, [{key: 'now-existent', value: 'I exist!'}]),
-      'on failing to add a property forbidden by the \'None\' permission',
-    ).to.be.rejectedWith(/common\.NoPermission/);
-
-    expect(await token.getProperties(['non-existent', 'now-existent'])).to.be.empty;
-
-    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
-    expect(consumedSpace).to.be.equal(originalSpace);
-  }
-
-  itSub('Forbids adding properties to a token if the property is not declared / forbidden with the \'None\' permission (NFT)', async ({helper}) =>  {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
-    await testForbidsAddingPropertiesIfPropertyNotDeclared(token, amount);
-  });
-
-  itSub.ifWithPallets('Forbids adding properties to a token if the property is not declared / forbidden with the \'None\' permission (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
-    await testForbidsAddingPropertiesIfPropertyNotDeclared(token, amount);
-  });
-
-  async function testForbidsAddingTooLargeProperties(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
-    const originalSpace = await prepare(token, pieces);
-
-    await expect(
-      token.collection.setTokenPropertyPermissions(alice, [
-        {key: 'a_holy_book', permission: {collectionAdmin: true, tokenOwner: true}},
-        {key: 'young_years', permission: {collectionAdmin: true, tokenOwner: true}},
-      ]),
-      'on setting new permissions for properties',
-    ).to.be.fulfilled;
-
-    // Mute the general tx parsing error
-    {
-      console.error = () => {};
-      await expect(token.setProperties(alice, [{key: 'a_holy_book', value: 'word '.repeat(6554)}]))
-        .to.be.rejected;
-    }
-
-    await expect(token.setProperties(alice, [
-      {key: 'a_holy_book', value: 'word '.repeat(3277)},
-      {key: 'young_years', value: 'neverending'.repeat(1490)},
-    ])).to.be.rejectedWith(/common\.NoSpaceForProperty/);
-
-    expect(await token.getProperties(['a_holy_book', 'young_years'])).to.be.empty;
-    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
-    expect(consumedSpace).to.be.equal(originalSpace);
-  }
-
-  itSub('Forbids adding too large properties to a token (NFT)', async ({helper}) =>  {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
-    await testForbidsAddingTooLargeProperties(token, amount);
-  });
-
-  itSub.ifWithPallets('Forbids adding too large properties to a token (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
-    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
-    await testForbidsAddingTooLargeProperties(token, amount);
-  });
-
-  [
-    {mode: 'nft' as const, requiredPallets: []},
-    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
-  ].map(testCase =>
-    itSub.ifWithPallets(`Forbids adding too many propeties to a token (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
-      const collection = await helper[testCase.mode].mintCollection(alice);
-      const maxPropertiesPerItem = 64;
-
-      for(let i = 0; i < maxPropertiesPerItem; i++) {
-        await collection.setTokenPropertyPermissions(alice, [{
-          key: `${i+1}`,
-          permission: {mutable: true, tokenOwner: true, collectionAdmin: true},
-        }]);
-      }
-
-      await expect(collection.setTokenPropertyPermissions(alice, [{
-        key: `${maxPropertiesPerItem}-th`,
-        permission: {mutable: true, tokenOwner: true, collectionAdmin: true},
-      }])).to.be.rejectedWith(/common\.PropertyLimitReached/);
-    }));
-
-  [
-    {mode: 'nft' as const, pieces: undefined, requiredPallets: []},
-    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]},
-  ].map(testCase =>
-    itSub.ifWithPallets(`Forbids force_repair_item from non-sudo (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
-      const propKey = 'tok-prop';
-
-      const collection = await helper[testCase.mode].mintCollection(alice, {
-        tokenPropertyPermissions: [
-          {
-            key: propKey,
-            permission: {mutable: true, tokenOwner: true},
-          },
-        ],
-      });
-      const token = await (
-        testCase.pieces
-          ? collection.mintToken(alice, testCase.pieces as any)
-          : collection.mintToken(alice)
-      );
-
-      const propDataSize = 4096;
-      const propData = 'a'.repeat(propDataSize);
-      await token.setProperties(alice, [{key: propKey, value: propData}]);
-
-      await expect(helper.executeExtrinsic(alice, 'api.tx.unique.forceRepairItem', [token.collectionId, token.tokenId], true))
-        .to.be.rejectedWith(/BadOrigin/);
-    }));
-});
-
-describe('ReFungible token properties permissions tests', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-  let charlie: IKeyringPair;
-
-  before(async function() {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
-
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
-    });
-  });
-
-  async function prepare(helper: UniqueHelper): Promise<UniqueRFToken> {
-    const collection = await helper.rft.mintCollection(alice);
-    const token = await collection.mintToken(alice, 100n);
-
-    await collection.addAdmin(alice, {Substrate: bob.address});
-    await collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable: true, tokenOwner: true}}]);
-
-    return token;
-  }
-
-  itSub('Forbids adding token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) =>  {
-    const token = await prepare(helper);
-
-    await token.transfer(alice, {Substrate: charlie.address}, 33n);
-
-    await expect(token.setProperties(alice, [
-      {key: 'fractals', value: 'multiverse'},
-    ])).to.be.rejectedWith(/common\.NoPermission/);
-  });
-
-  itSub('Forbids mutating token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) =>  {
-    const token = await prepare(helper);
-
-    await expect(token.collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable:true, tokenOwner: true}}]))
-      .to.be.fulfilled;
-
-    await expect(token.setProperties(alice, [
-      {key: 'fractals', value: 'multiverse'},
-    ])).to.be.fulfilled;
-
-    await token.transfer(alice, {Substrate: charlie.address}, 33n);
-
-    await expect(token.setProperties(alice, [
-      {key: 'fractals', value: 'want to rule the world'},
-    ])).to.be.rejectedWith(/common\.NoPermission/);
-  });
-
-  itSub('Forbids deleting token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) =>  {
-    const token = await prepare(helper);
-
-    await expect(token.setProperties(alice, [
-      {key: 'fractals', value: 'one headline - why believe it'},
-    ])).to.be.fulfilled;
-
-    await token.transfer(alice, {Substrate: charlie.address}, 33n);
-
-    await expect(token.deleteProperties(alice, ['fractals'])).
-      to.be.rejectedWith(/common\.NoPermission/);
-  });
-
-  itSub('Allows token property mutation with collectionOwner==true when admin doesn\'t have all pieces', async ({helper}) =>  {
-    const token = await prepare(helper);
-
-    await token.transfer(alice, {Substrate: charlie.address}, 33n);
-
-    await expect(token.collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable:true, collectionAdmin: true}}]))
-      .to.be.fulfilled;
-
-    await expect(token.setProperties(alice, [
-      {key: 'fractals', value: 'multiverse'},
-    ])).to.be.fulfilled;
-  });
-});
deletedjs-packages/tests/nesting/unnest.test.tsdiffbeforeafterboth
--- a/js-packages/tests/nesting/unnest.test.ts
+++ /dev/null
@@ -1,325 +0,0 @@
-// 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 type {IKeyringPair} from '@polkadot/types/types';
-import {expect, itSub, Pallets, usingPlaygrounds} from '../util/index.js';
-import {CrossAccountId, UniqueFTCollection, UniqueNFToken, UniqueRFToken} from '@unique/playgrounds/unique.js';
-
-describe('Integration Test: Unnesting', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-  let charlie: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob, charlie] = await helper.arrange.createAccounts([200n, 50n, 50n], donor);
-    });
-  });
-
-  itSub('NFT: allows the owner to successfully unnest a token', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const targetToken = await collection.mintToken(alice);
-
-    // Create a nested token
-    const nestedToken = await collection.mintToken(alice, targetToken.nestingAccount());
-
-    // Unnest
-    await expect(nestedToken.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}), 'while unnesting').to.be.fulfilled;
-    expect(await nestedToken.getOwner()).to.be.deep.equal({Substrate: alice.address});
-
-    // Nest and burn
-    await nestedToken.nest(alice, targetToken);
-    await expect(nestedToken.burnFrom(alice, targetToken.nestingAccount()), 'while burning').to.be.fulfilled;
-    await expect(nestedToken.getOwner()).to.be.rejected;
-  });
-
-  itSub('NativeFungible: allows the owner to successfully unnest a token', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const targetToken = await collection.mintToken(alice);
-
-    const collectionFT = helper.ft.getCollectionObject(0);
-
-    // Nest
-    await collectionFT.transfer(alice, targetToken.nestingAccount(), 10n);
-    // Unnest
-    await expect(collectionFT.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}, 9n), 'while unnesting').to.be.fulfilled;
-
-    expect(await collectionFT.getBalance(targetToken.nestingAccount())).to.be.equal(1n);
-  });
-
-  itSub('Fungible: allows the owner to successfully unnest a token', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const targetToken = await collection.mintToken(alice);
-
-    const collectionFT = await helper.ft.mintCollection(alice);
-
-    // Nest and unnest
-    await collectionFT.mint(alice, 10n, targetToken.nestingAccount());
-    await expect(collectionFT.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}, 9n), 'while unnesting').to.be.fulfilled;
-    expect(await collectionFT.getBalance({Substrate: alice.address})).to.be.equal(9n);
-    expect(await collectionFT.getBalance(targetToken.nestingAccount())).to.be.equal(1n);
-
-    // Nest and burn
-    await collectionFT.transfer(alice, targetToken.nestingAccount(), 5n);
-    await expect(collectionFT.burnTokensFrom(alice, targetToken.nestingAccount(), 6n), 'while burning').to.be.fulfilled;
-    expect(await collectionFT.getBalance({Substrate: alice.address})).to.be.equal(4n);
-    expect(await collectionFT.getBalance(targetToken.nestingAccount())).to.be.equal(0n);
-    expect(await targetToken.getChildren()).to.be.length(0);
-  });
-
-  itSub.ifWithPallets('ReFungible: allows the owner to successfully unnest a token', [Pallets.ReFungible], async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const targetToken = await collection.mintToken(alice);
-
-    const collectionRFT = await helper.rft.mintCollection(alice);
-
-    // Nest and unnest
-    const token = await collectionRFT.mintToken(alice, 10n, targetToken.nestingAccount());
-    await expect(token.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}, 9n), 'while unnesting').to.be.fulfilled;
-    expect(await token.getBalance({Substrate: alice.address})).to.be.equal(9n);
-    expect(await token.getBalance(targetToken.nestingAccount())).to.be.equal(1n);
-
-    // Nest and burn
-    await token.transfer(alice, targetToken.nestingAccount(), 5n);
-    await expect(token.burnFrom(alice, targetToken.nestingAccount(), 6n), 'while burning').to.be.fulfilled;
-    expect(await token.getBalance({Substrate: alice.address})).to.be.equal(4n);
-    expect(await token.getBalance(targetToken.nestingAccount())).to.be.equal(0n);
-    expect(await targetToken.getChildren()).to.be.length(0);
-  });
-
-  async function checkNestedAmountState({
-    expectedBalance,
-    childrenShouldPresent,
-    nested,
-    targetNft,
-  }: {
-    expectedBalance: bigint,
-    childrenShouldPresent: boolean,
-    nested: UniqueFTCollection | UniqueRFToken,
-    targetNft: UniqueNFToken,
-  }) {
-    const balance = await nested.getBalance(targetNft.nestingAccount());
-    expect(balance).to.be.equal(expectedBalance);
-
-    const children = await targetNft.getChildren();
-
-    if(childrenShouldPresent) {
-      expect(children[0]).to.be.deep.equal({
-        collectionId: nested.collectionId,
-        tokenId: (nested instanceof UniqueFTCollection) ? 0 : nested.tokenId,
-      });
-    } else {
-      expect(children.length).to.be.equal(0);
-    }
-  }
-
-  function ownerOrAdminUnnestCases(modes: ('ft' | 'nft' | 'rft')[]): {
-    mode: 'ft' | 'nft' | 'rft',
-    sender: string,
-    op: 'transfer' | 'burn',
-    requiredPallets: Pallets[],
-  }[] {
-    const senders = ['owner', 'admin'];
-    const ops = ['transfer', 'burn'];
-
-    const cases = [];
-    for(const mode of modes) {
-      const requiredPallets = (mode === 'rft')
-        ? [Pallets.ReFungible]
-        : [];
-
-      for(const sender of senders) {
-        for(const op of ops) {
-          cases.push({
-            mode: mode as 'ft' | 'nft' | 'rft',
-            sender,
-            op: op as 'transfer' | 'burn',
-            requiredPallets,
-          });
-        }
-      }
-    }
-
-    return cases;
-  }
-
-  ownerOrAdminUnnestCases(['ft', 'rft']).map(testCase =>
-    itSub.ifWithPallets(`[${testCase.mode}]: allows a collection ${testCase.sender} to ${testCase.op} nested token`, testCase.requiredPallets, async({helper}) => {
-      const owner = alice;
-      const admin = bob;
-
-      const unnester = (testCase.sender === 'owner')
-        ? owner
-        : admin;
-
-      const collectionNFT = await helper.nft.mintCollection(owner);
-      await collectionNFT.setPermissions(owner, {nesting: {tokenOwner: true}});
-
-      const collectionNested = await helper[testCase.mode as 'ft' | 'rft'].mintCollection(owner, {
-        limits: {
-          ownerCanTransfer: true,
-        },
-      });
-      await collectionNested.addAdmin(owner, {Substrate: admin.address});
-
-      const targetNft = await collectionNFT.mintToken(owner, {Substrate: charlie.address});
-
-      let nested: UniqueFTCollection | UniqueRFToken;
-      const totalAmount = 5n;
-      const firstUnnestAmount = 2n;
-      const restUnnestAmount = totalAmount - firstUnnestAmount;
-
-      if(collectionNested instanceof UniqueFTCollection) {
-        await collectionNested.mint(owner, totalAmount, {Substrate: charlie.address});
-        nested = collectionNested;
-      } else {
-        nested = await collectionNested.mintToken(owner, totalAmount, {Substrate: charlie.address});
-      }
-
-      // transfer/burn `amount` of nested assets by `unnester`.
-      const doOperationAndCheck = async ({
-        amount,
-        shouldBeNestedAfterOp,
-      }: {
-        amount: bigint,
-        shouldBeNestedAfterOp: boolean,
-      }) => {
-        const nestedBalanceBeforeOp = await nested.getBalance(targetNft.nestingAccount());
-
-        if(testCase.op === 'transfer') {
-          const bobBalanceBeforeOp = await nested.getBalance({Substrate: bob.address});
-
-          await nested.transferFrom(unnester, targetNft.nestingAccount(), {Substrate: bob.address}, amount);
-          expect(await nested.getBalance({Substrate: bob.address})).to.be.equal(bobBalanceBeforeOp + amount);
-        } else {
-          if(nested instanceof UniqueFTCollection) {
-            await nested.burnTokensFrom(unnester, targetNft.nestingAccount(), amount);
-          } else {
-            await nested.burnFrom(unnester, targetNft.nestingAccount(), amount);
-          }
-        }
-
-        await checkNestedAmountState({
-          expectedBalance: nestedBalanceBeforeOp - amount,
-          childrenShouldPresent: shouldBeNestedAfterOp,
-          nested,
-          targetNft,
-        });
-      };
-
-      // Initial setup: nest (fungibles/rft parts).
-      // Check NFT's balance of nested assets and NFT's children.
-      await nested.transfer(charlie, targetNft.nestingAccount(), totalAmount);
-      await checkNestedAmountState({
-        expectedBalance: totalAmount,
-        childrenShouldPresent: true,
-        nested,
-        targetNft,
-      });
-
-      // Transfer/burn only a part of nested assets.
-      // Check that NFT's balance of the nested assets correctly decreased and NFT's children are not changed.
-      await doOperationAndCheck({
-        amount: firstUnnestAmount,
-        shouldBeNestedAfterOp: true,
-      });
-
-      // Transfer/burn all remaining nested assets.
-      // Check that NFT's balance of the nested assets is 0 and NFT has no more children.
-      await doOperationAndCheck({
-        amount: restUnnestAmount,
-        shouldBeNestedAfterOp: false,
-      });
-    }));
-
-  ownerOrAdminUnnestCases(['nft']).map(testCase =>
-    itSub(`[nft]: allows a collection ${testCase.sender} to ${testCase.op} nested token`, async ({helper}) => {
-      const owner = alice;
-      const admin = bob;
-
-      const unnester = (testCase.sender === 'owner')
-        ? owner
-        : admin;
-
-      const collectionNFT = await helper.nft.mintCollection(owner);
-      await collectionNFT.setPermissions(owner, {nesting: {tokenOwner: true}});
-
-      const collectionNested = await helper.nft.mintCollection(owner, {
-        limits: {
-          ownerCanTransfer: true,
-        },
-      });
-      await collectionNested.addAdmin(owner, {Substrate: admin.address});
-
-      const targetNft = await collectionNFT.mintToken(owner, {Substrate: charlie.address});
-      const nested = await collectionNested.mintToken(owner, {Substrate: charlie.address});
-
-      await nested.transfer(charlie, targetNft.nestingAccount());
-      expect(await targetNft.getChildren()).to.be.deep.equal([{
-        collectionId: nested.collectionId,
-        tokenId: nested.tokenId,
-      }]);
-
-      if(testCase.op === 'transfer') {
-        await nested.transferFrom(unnester, targetNft.nestingAccount(), {Substrate: bob.address});
-      } else {
-        await nested.burnFrom(unnester, targetNft.nestingAccount());
-      }
-
-      expect((await targetNft.getChildren()).length).to.be.equal(0);
-    }));
-});
-
-describe('Negative Test: Unnesting', () => {
-  let alice: IKeyringPair;
-  let bob: IKeyringPair;
-
-  before(async () => {
-    await usingPlaygrounds(async (helper, privateKey) => {
-      const donor = await privateKey({url: import.meta.url});
-      [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
-    });
-  });
-
-  itSub('Disallows a non-owner to unnest/burn a token', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const targetToken = await collection.mintToken(alice);
-
-    // Create a nested token
-    const nestedToken = await collection.mintToken(alice, targetToken.nestingAccount());
-
-    // Try to unnest
-    await expect(nestedToken.unnest(bob, targetToken, {Substrate: alice.address})).to.be.rejectedWith(/common\.ApprovedValueTooLow/);
-    expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
-
-    // Try to burn
-    await expect(nestedToken.burnFrom(bob, targetToken.nestingAccount())).to.be.rejectedWith(/common\.ApprovedValueTooLow/);
-    expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
-  });
-
-  // todo another test for creating excessive depth matryoshka with Ethereum?
-
-  // Recursive nesting
-  itSub('Prevents Ouroboros creation', async ({helper}) => {
-    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
-    const targetToken = await collection.mintToken(alice);
-
-    // Fail to create a nested token ouroboros
-    const nestedToken = await collection.mintToken(alice, targetToken.nestingAccount());
-    await expect(targetToken.nest(alice, nestedToken)).to.be.rejectedWith(/^structure\.OuroborosDetected$/);
-  });
-});
modifiedjs-packages/tests/package.jsondiffbeforeafterboth
--- a/js-packages/tests/package.json
+++ b/js-packages/tests/package.json
@@ -21,8 +21,9 @@
         "test": "yarn _test './**/*.*test.ts'",
         "testParallel": "yarn _testParallel './**/*.test.ts'",
         "testSequential": "yarn _test './**/*.seqtest.ts'",
-        "testGovernance": "RUN_GOV_TESTS=1 yarn _test ./**/governance/*.*test.ts",
-        "testCollators": "RUN_COLLATOR_TESTS=1 yarn _test ./**/collator-selection/**.*test.ts --timeout 49999999",
+        "testEth": "yarn _test ./**/eth/*.*test.ts",
+        "testGovernance": "RUN_GOV_TESTS=1 yarn _test ./**/sub/governance/*.*test.ts",
+        "testCollators": "RUN_COLLATOR_TESTS=1 yarn _test ./**/sub/collator-selection/**.*test.ts --timeout 49999999",
         "testFullXcmUnique": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/*Unique.test.ts",
         "testFullXcmQuartz": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/*Quartz.test.ts",
         "testXcmOpal": "RUN_XCM_TESTS=1 yarn _test ./**/xcm/xcmOpal.test.ts",
modifiedjs-packages/tests/scheduler.seqtest.tsdiffbeforeafterboth
--- a/js-packages/tests/scheduler.seqtest.ts
+++ b/js-packages/tests/scheduler.seqtest.ts
@@ -507,7 +507,7 @@
     for(let offset = 0; offset < numFilledBlocks; offset ++) {
       for(let i = 0; i < maxScheduledPerBlock; i++) {
 
-        const scheduledTx = helper.constructApiCall('api.tx.balances.transfer', [bob.address, 1n]);
+        const scheduledTx = helper.constructApiCall('api.tx.balances.transferKeepAlive', [bob.address, 1n]);
 
         const when = firstExecutionBlockNumber + period + offset;
         const mandatoryArgs = [when, null, null, scheduledTx];
@@ -710,7 +710,7 @@
     //   await addToAllowListExpectSuccess(alice, collectionId, zeroBalance.address);
 
     //   // Grace zeroBalance with money, enough to cover future transactions
-    //   const balanceTx = api.tx.balances.transfer(zeroBalance.address, 1n * UNIQUE);
+    //   const balanceTx = api.tx.balances.transferKeepAlive(zeroBalance.address, 1n * UNIQUE);
     //   await submitTransactionAsync(alice, balanceTx);
 
     //   // Mint a fresh NFT
@@ -722,7 +722,7 @@
     //   await scheduleTransferExpectSuccess(api, collectionId, tokenId, zeroBalance, alice, 1, waitForBlocks, scheduledId);
 
     //   // Get rid of the account's funds before the scheduled transaction takes place
-    //   const balanceTx2 = api.tx.balances.transfer(alice.address, UNIQUE * 68n / 100n);
+    //   const balanceTx2 = api.tx.balances.transferKeepAlive(alice.address, UNIQUE * 68n / 100n);
     //   const events = await submitTransactionAsync(zeroBalance, balanceTx2);
     //   expect(getGenericResult(events).success).to.be.true;
     //   /*const emptyBalanceTx = api.tx.balances.setBalance(zeroBalance.address, 0, 0); // do not null reserved?
@@ -742,7 +742,7 @@
 
     // await usingApi(async (api, privateKey) => {
     //   const zeroBalance = await findUnusedAddress(api, privateKey);
-    //   const balanceTx = api.tx.balances.transfer(zeroBalance.address, 1n * UNIQUE);
+    //   const balanceTx = api.tx.balances.transferKeepAlive(zeroBalance.address, 1n * UNIQUE);
     //   await submitTransactionAsync(alice, balanceTx);
 
     //   await setCollectionSponsorExpectSuccess(collectionId, zeroBalance.address);
addedjs-packages/tests/sub/check-event/burnItemEvent.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/check-event/burnItemEvent.test.ts
@@ -0,0 +1,44 @@
+// 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/>.
+
+// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from '../../util/index.js';
+import type {IEvent} from '@unique/playgrounds/types.js';
+
+
+describe('Burn Item event ', () => {
+  let alice: IKeyringPair;
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([10n], donor);
+    });
+  });
+  itSub('Check event from burnItem(): ', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
+    const token = await collection.mintToken(alice, {Substrate: alice.address});
+    await token.burn(alice);
+    await helper.wait.newBlocks(1);
+
+    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
+    const eventStrings = event.map(e => `${e.section}.${e.method}`);
+
+    expect(eventStrings).to.contains('common.ItemDestroyed');
+    expect(eventStrings).to.contains('treasury.Deposit');
+    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
+  });
+});
addedjs-packages/tests/sub/check-event/createCollectionEvent.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/check-event/createCollectionEvent.test.ts
@@ -0,0 +1,40 @@
+// 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/>.
+
+// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect} from '../../util/index.js';
+import type {IEvent} from '@unique/playgrounds/types.js';
+
+describe('Create collection event ', () => {
+  let alice: IKeyringPair;
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([10n], donor);
+    });
+  });
+  itSub('Check event from createCollection(): ', async ({helper}) => {
+    await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
+    await helper.wait.newBlocks(1);
+    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
+    const eventStrings = event.map(e => `${e.section}.${e.method}`);
+
+    expect(eventStrings).to.contains('common.CollectionCreated');
+    expect(eventStrings).to.contains('treasury.Deposit');
+    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
+  });
+});
addedjs-packages/tests/sub/check-event/createItemEvent.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/check-event/createItemEvent.test.ts
@@ -0,0 +1,41 @@
+// 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/>.
+
+// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from '../../util/index.js';
+import type {IEvent} from '@unique/playgrounds/types.js';
+
+describe('Create Item event ', () => {
+  let alice: IKeyringPair;
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([10n], donor);
+    });
+  });
+  itSub('Check event from createItem(): ', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
+    await collection.mintToken(alice, {Substrate: alice.address});
+    await helper.wait.newBlocks(1);
+    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
+    const eventStrings = event.map(e => `${e.section}.${e.method}`);
+
+    expect(eventStrings).to.contains('common.ItemCreated');
+    expect(eventStrings).to.contains('treasury.Deposit');
+    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
+  });
+});
addedjs-packages/tests/sub/check-event/createMultipleItemsEvent.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/check-event/createMultipleItemsEvent.test.ts
@@ -0,0 +1,46 @@
+// 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/>.
+
+// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect} from '../../util/index.js';
+import type {IEvent} from '@unique/playgrounds/types.js';
+
+describe('Create Multiple Items Event event ', () => {
+  let alice: IKeyringPair;
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([10n], donor);
+    });
+  });
+  itSub('Check event from createMultipleItems(): ', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
+
+    await collection.mintMultipleTokens(alice, [
+      {owner: {Substrate: alice.address}},
+      {owner: {Substrate: alice.address}},
+    ]);
+
+    await helper.wait.newBlocks(1);
+    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
+    const eventStrings = event.map(e => `${e.section}.${e.method}`);
+
+    expect(eventStrings).to.contains('common.ItemCreated');
+    expect(eventStrings).to.contains('treasury.Deposit');
+    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
+  });
+});
addedjs-packages/tests/sub/check-event/destroyCollectionEvent.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/check-event/destroyCollectionEvent.test.ts
@@ -0,0 +1,42 @@
+// 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/>.
+
+// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
+import type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, usingPlaygrounds, expect} from '../../util/index.js';
+import type {IEvent} from '@unique/playgrounds/types.js';
+
+describe('Destroy collection event ', () => {
+  let alice: IKeyringPair;
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([10n], donor);
+    });
+  });
+
+  itSub('Check event from destroyCollection(): ', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
+    await collection.burn(alice);
+    await helper.wait.newBlocks(1);
+    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
+    const eventStrings = event.map(e => `${e.section}.${e.method}`);
+
+    expect(eventStrings).to.contains('common.CollectionDestroyed');
+    expect(eventStrings).to.contains('treasury.Deposit');
+    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
+  });
+});
addedjs-packages/tests/sub/check-event/transferEvent.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/check-event/transferEvent.test.ts
@@ -0,0 +1,45 @@
+// 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/>.
+
+// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from '../../util/index.js';
+import type {IEvent} from '@unique/playgrounds/types.js';
+
+describe('Transfer event ', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
+    });
+  });
+
+  itSub('Check event from transfer(): ', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
+    const token = await collection.mintToken(alice, {Substrate: alice.address});
+    await token.transfer(alice, {Substrate: bob.address});
+    await helper.wait.newBlocks(1);
+    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
+    const eventStrings = event.map(e => `${e.section}.${e.method}`);
+
+    expect(eventStrings).to.contains('common.Transfer');
+    expect(eventStrings).to.contains('treasury.Deposit');
+    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
+  });
+});
addedjs-packages/tests/sub/check-event/transferFromEvent.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/check-event/transferFromEvent.test.ts
@@ -0,0 +1,44 @@
+// 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/>.
+
+// https://unique-network.readthedocs.io/en/latest/jsapi.html#setchainlimits
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub} from '../../util/index.js';
+import type {IEvent} from '@unique/playgrounds/types.js';
+
+describe('Transfer event ', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob] = await helper.arrange.createAccounts([10n, 10n], donor);
+    });
+  });
+
+  itSub('Check event from transfer(): ', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {name: 'test', description: 'test', tokenPrefix: 'test'});
+    const token = await collection.mintToken(alice, {Substrate: alice.address});
+    await token.transferFrom(alice, {Substrate: alice.address}, {Substrate: bob.address});
+    await helper.wait.newBlocks(1);
+    const event = helper.chainLog[helper.chainLog.length - 1].events as IEvent[];
+    const eventStrings = event.map(e => `${e.section}.${e.method}`);
+
+    expect(eventStrings).to.contains('common.Transfer');
+    expect(eventStrings).to.contains('treasury.Deposit');
+    expect(eventStrings).to.contains('system.ExtrinsicSuccess');
+  });
+});
addedjs-packages/tests/sub/collator-selection/collatorSelection.seqtest.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/collator-selection/collatorSelection.seqtest.ts
@@ -0,0 +1,423 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../../util/index.js';
+
+async function nodeAddress(name: string) {
+  // eslint-disable-next-line require-await
+  return await usingPlaygrounds(async (helper) => {
+    const envNodeStash = `RELAY_UNIQUE_NODE_${name.toUpperCase()}_STASH`;
+
+    const nodeStash = process.env[envNodeStash];
+    if(nodeStash) {
+      return helper.address.normalizeSubstrateToChainFormat(nodeStash);
+    } else {
+      throw Error(`"${envNodeStash}" env var is not set`);
+    }
+  });
+}
+
+async function getInitialInvulnerables() {
+  return await Promise.all([
+    nodeAddress('alpha'),
+    nodeAddress('beta'),
+    nodeAddress('gamma'),
+    nodeAddress('delta'),
+  ]);
+}
+
+async function resetInvulnerables() {
+  await usingPlaygrounds(async (helper, privateKey) => {
+    const superuser = await privateKey('//Alice');
+    const initialInvulnerables = await getInitialInvulnerables();
+
+    const invulnerables = await helper.collatorSelection.getInvulnerables();
+
+    // Remove all invulnerables but the first one
+    const firstInvulnerable = invulnerables[0];
+
+    let nonce = await helper.chain.getNonce(superuser.address);
+    await Promise.all(invulnerables.slice(1).map(invulnerable => helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [invulnerable], true, {nonce: nonce++})));
+
+    // Add the initial invulnerables
+    await Promise.all(initialInvulnerables.map(invulnerable => helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [invulnerable], true, {nonce: nonce++})));
+
+    // Remove the first invulnerable if it's not an initial one
+    if(!initialInvulnerables.includes(firstInvulnerable)) {
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [firstInvulnerable]);
+    }
+  });
+}
+
+// todo:collator Most preferable to launch this test in parallel somehow -- or change the session period (1 hr).
+describe('Integration Test: Collator Selection', () => {
+  let superuser: IKeyringPair;
+  let previousLicenseBond = 0n;
+  let licenseBond = 0n;
+
+  before(async function() {
+    if(!process.env.RUN_COLLATOR_TESTS) this.skip();
+
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.CollatorSelection]);
+      superuser = await privateKey('//Alice');
+
+      previousLicenseBond = await helper.collatorSelection.getLicenseBond();
+      licenseBond = 10n * helper.balance.getOneTokenNominal();
+      await helper.getSudo().collatorSelection.setLicenseBond(superuser, licenseBond);
+    });
+  });
+
+  describe('Dynamic shuffling of collators', () => {
+    // These two are the default invulnerables, and should return to be invulnerables after this suite.
+    let alphaNode: string;
+    let betaNode: string;
+
+    let gammaNode: string;
+    let deltaNode: string;
+
+    before(async function() {
+      await usingPlaygrounds(async (helper) => {
+        // todo:collator see again if blocks start to be finalized in dev mode
+        // Skip the collator block production in dev mode, since the blocks are sealed automatically.
+        if(await helper.arrange.isDevNode()) this.skip();
+
+        [alphaNode, betaNode, gammaNode, deltaNode] = await getInitialInvulnerables();
+
+        const invulnerables = await helper.collatorSelection.getInvulnerables();
+        expect(invulnerables.length, 'Invalid initial invulnerables number').to.be.equal(4);
+        expect(invulnerables, 'Invalid initial invulnerables').containSubset([alphaNode, betaNode, gammaNode, deltaNode]);
+      });
+    });
+
+    itSub('Change invulnerables and make sure they start producing blocks', async ({helper}) => {
+      let nonce = await helper.chain.getNonce(superuser.address);
+
+      nonce = await helper.chain.getNonce(superuser.address);
+      await expect(Promise.all([
+        helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [alphaNode], true, {nonce: nonce++}),
+        helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [betaNode], true, {nonce: nonce++}),
+      ])).to.be.fulfilled;
+
+      const newInvulnerables = await helper.collatorSelection.getInvulnerables();
+      expect(newInvulnerables).to.contain(gammaNode).and.contain(deltaNode).and.be.length(2);
+
+      await helper.wait.newSessions(2);
+
+      const newValidators = await helper.callRpc('api.query.session.validators');
+      expect(newValidators).to.contain(gammaNode).and.contain(deltaNode).and.be.length(2);
+
+      const lastBlockNumber = await helper.chain.getLatestBlockNumber();
+      await helper.wait.newBlocks(1);
+      const lastGammaBlock = (await helper.callRpc('api.query.collatorSelection.lastAuthoredBlock', [gammaNode])).toNumber();
+      const lastDeltaBlock = (await helper.callRpc('api.query.collatorSelection.lastAuthoredBlock', [deltaNode])).toNumber();
+      expect(lastGammaBlock >= lastBlockNumber || lastDeltaBlock >= lastBlockNumber).to.be.true;
+    });
+
+    after(async () => {
+      await resetInvulnerables();
+    });
+  });
+
+  describe('Getting and releasing licenses to collate', () => {
+    let crowd: IKeyringPair[];
+
+    before(async function() {
+      await usingPlaygrounds(async (helper) => {
+        crowd = await helper.arrange.createCrowd(20, 100n, superuser);
+
+        // set session keys for everyone
+        await Promise.all(crowd.map(acc => helper.session.setOwnKeysFromAddress(acc)));
+      });
+    });
+
+    describe('Positive', () => {
+      itSub('Can lease and release a license', async ({helper}) => {
+        const account = crowd.pop()!;
+
+        // make sure it does not have any reserved funds
+        expect((await helper.balance.getSubstrateFull(account.address)).reserved).to.be.equal(0n);
+
+        // getting a license reserves a license bond cost
+        await helper.collatorSelection.obtainLicense(account);
+        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(licenseBond);
+        expect((await helper.balance.getSubstrateFull(account.address)).reserved).to.be.equal(licenseBond);
+
+        // releasing a license un-reserves the license bond cost
+        await helper.collatorSelection.releaseLicense(account);
+        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(0n);
+
+        const balance = await helper.balance.getSubstrateFull(account.address);
+        expect(balance.reserved).to.be.equal(0n);
+        expect(balance.free > 100n - licenseBond);
+      });
+
+      itSub('Can force revoke a license', async ({helper}) => {
+        const account = crowd.pop()!;
+
+        // getting a license reserves a license bond cost
+        const previousBalance = await helper.balance.getSubstrateFull(account.address);
+        await helper.collatorSelection.obtainLicense(account);
+        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(licenseBond);
+
+        // force-releasing a license un-reserves the license bond cost as well
+        await helper.getSudo().collatorSelection.forceReleaseLicense(superuser, account.address);
+        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(previousBalance.reserved);
+
+        const balance = await helper.balance.getSubstrateFull(account.address);
+        expect(balance.reserved).to.be.equal(previousBalance.reserved);
+        expect(balance.free > previousBalance.free - licenseBond);
+      });
+    });
+
+    describe('Negative', () => {
+      itSub('Cannot get a license without session keys set', async ({helper}) => {
+        const [account] = await helper.arrange.createAccounts([100n], superuser);
+        await expect(helper.collatorSelection.obtainLicense(account))
+          .to.be.rejectedWith(/collatorSelection.ValidatorNotRegistered/);
+      });
+
+      itSub('Cannot register a license twice', async ({helper}) => {
+        const account = crowd.pop()!;
+        await helper.collatorSelection.obtainLicense(account);
+        await expect(helper.collatorSelection.obtainLicense(account))
+          .to.be.rejectedWith(/collatorSelection.AlreadyHoldingLicense/);
+      });
+
+      itSub('Cannot release a license twice', async ({helper}) => {
+        const account = crowd.pop()!;
+        await helper.collatorSelection.obtainLicense(account);
+        await helper.collatorSelection.releaseLicense(account);
+        await expect(helper.collatorSelection.releaseLicense(account))
+          .to.be.rejectedWith(/collatorSelection.NoLicense/);
+      });
+
+      itSub('Cannot force revoke a license as non-sudo', async ({helper}) => {
+        const account = crowd.pop()!;
+        await helper.collatorSelection.obtainLicense(account);
+        await expect(helper.collatorSelection.forceReleaseLicense(superuser, account.address))
+          .to.be.rejectedWith(/BadOrigin/);
+      });
+    });
+  });
+
+  describe('Onboarding, collating, and offboarding as collator candidates', () => {
+    let crowd: IKeyringPair[];
+
+    before(async function() {
+      await usingPlaygrounds(async (helper) => {
+        crowd = await helper.arrange.createCrowd(20, 100n, superuser);
+
+        // set session keys for everyone
+        await Promise.all(crowd.map(acc => helper.session.setOwnKeysFromAddress(acc)));
+      });
+    });
+
+    describe('Positive', () => {
+      itSub('Can onboard and offboard repeatedly', async ({helper}) => {
+        const account = crowd.pop()!;
+        await helper.collatorSelection.obtainLicense(account);
+        await helper.collatorSelection.onboard(account);
+        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([account.address]);
+
+        await helper.collatorSelection.offboard(account);
+        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([]);
+
+        await helper.collatorSelection.onboard(account);
+        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([account.address]);
+
+        await helper.collatorSelection.offboard(account);
+        expect(await helper.collatorSelection.getCandidates()).to.be.deep.equal([]);
+      });
+
+      itSub('Penalizes and forfeits license from faulty collators', async ({helper}) => {
+        // This one shouldn't even be able to produce blocks.
+        const account = crowd.pop()!;
+        await helper.collatorSelection.obtainLicense(account);
+        await helper.collatorSelection.onboard(account);
+        expect(await helper.collatorSelection.getCandidates()).to.contain(account.address);
+
+        // Wait for 3 new sessions before checking that the collator will be kicked:
+        // one to get collator onboarded, and another two for the collator to fail
+        await helper.wait.newSessions(3);
+
+        expect(await helper.collatorSelection.getCandidates()).to.not.contain(account.address);
+        expect(await helper.collatorSelection.hasLicense(account.address)).to.be.equal(0n);
+
+        // The account's reserved funds get slashed as a penalty
+        const balance = await helper.balance.getSubstrateFull(account.address);
+        expect(balance.reserved).to.be.equal(0n);
+        expect(balance.free < 100n - licenseBond);
+      });
+    });
+
+    describe('Negative', () => {
+      itSub('Cannot onboard without a license', async ({helper}) => {
+        const account = crowd.pop()!;
+        await expect(helper.collatorSelection.onboard(account))
+          .to.be.rejectedWith(/collatorSelection.NoLicense/);
+      });
+
+      itSub('Cannot offboard without a license', async ({helper}) => {
+        const account = crowd.pop()!;
+        await expect(helper.collatorSelection.offboard(account))
+          .to.be.rejectedWith(/collatorSelection.NotCandidate/);
+      });
+
+      itSub('Cannot offboard while not onboarded', async ({helper}) => {
+        const account = crowd.pop()!;
+        await helper.collatorSelection.obtainLicense(account);
+        await expect(helper.collatorSelection.offboard(account))
+          .to.be.rejectedWith(/collatorSelection.NotCandidate/);
+      });
+
+      itSub('Cannot onboard while already onboarded', async ({helper}) => {
+        const account = crowd.pop()!;
+        await helper.collatorSelection.obtainLicense(account);
+        await helper.collatorSelection.onboard(account);
+        await expect(helper.collatorSelection.onboard(account))
+          .to.be.rejectedWith(/collatorSelection.AlreadyCandidate/);
+      });
+    });
+  });
+
+  describe('Addition and removal of invulnerables', () => {
+    describe('Positive', () => {
+      itSub('Adds an invulnerable', async ({helper}) => {
+        const [account] = await helper.arrange.createAccounts([10n], superuser);
+        const invulnerables = await helper.collatorSelection.getInvulnerables();
+
+        await helper.session.setOwnKeysFromAddress(account);
+        await helper.getSudo().collatorSelection.addInvulnerable(superuser, account.address);
+
+        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
+        expect(invulnerables.concat(account.address)).to.have.all.members(newInvulnerables);
+      });
+
+      itSub('Removes an invulnerable', async ({helper}) => {
+        const invulnerables = await helper.collatorSelection.getInvulnerables();
+        const lastInvulnerable = invulnerables.pop()!;
+
+        await helper.getSudo().collatorSelection.removeInvulnerable(superuser, lastInvulnerable);
+        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
+        // invulnerables had its last element removed, so they should be equal
+        expect(newInvulnerables).to.have.all.members(invulnerables);
+      });
+    });
+
+    describe('Negative', () => {
+      itSub('Does not duplicate an invulnerable', async ({helper}) => {
+        const invulnerables = await helper.collatorSelection.getInvulnerables();
+        // adding an already invulnerable should not fail, but should not duplicate it either
+        await expect(helper.getSudo().collatorSelection.addInvulnerable(superuser, invulnerables[0]))
+          .to.be.fulfilled;
+        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
+        expect(newInvulnerables).to.have.all.members(invulnerables);
+      });
+
+      itSub('Cannot remove a non-existent invulnerable', async ({helper}) => {
+        const [account] = await helper.arrange.createAccounts([0n], superuser);
+        await expect(helper.getSudo().collatorSelection.removeInvulnerable(superuser, account.address))
+          .to.be.rejectedWith(/collatorSelection.NotInvulnerable/);
+      });
+
+      itSub('Cannot allow invulnerables to be empty', async ({helper}) => {
+        const invulnerables = await helper.collatorSelection.getInvulnerables();
+        const lastInvulnerable = invulnerables.pop()!;
+
+        let nonce = await helper.chain.getNonce(superuser.address);
+        await Promise.all(invulnerables.map((i: any) =>
+          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [i], true, {nonce: nonce++})));
+
+        await expect(helper.getSudo().collatorSelection.removeInvulnerable(superuser, lastInvulnerable))
+          .to.be.rejectedWith(/collatorSelection.TooFewInvulnerables/);
+
+        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
+        expect(newInvulnerables).to.be.deep.equal([lastInvulnerable]);
+
+        // restore the invulnerables to the previous state
+        nonce = await helper.chain.getNonce(superuser.address);
+        await Promise.all(invulnerables.map((i: any) =>
+          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [i], true, {nonce: nonce++})));
+      });
+
+      itSub('Cannot have too many invulnerables', async ({helper}) => {
+        // todo:collator make sure that there is enough session time for a set of tests
+        // 28 non-functioning collators, teehee.
+
+        const invulnerablesLength = (await helper.collatorSelection.getInvulnerables()).length;
+        const invulnerablesUntilLimit = (await helper.collatorSelection.getDesiredCollators()) - invulnerablesLength;
+        const newInvulnerables = await helper.arrange.createAccounts(Array(invulnerablesUntilLimit).fill(10n), superuser);
+        const [lastInvulnerable] = await helper.arrange.createAccounts([10n], superuser);
+
+        await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
+          helper.session.setOwnKeysFromAddress(i)));
+        await helper.session.setOwnKeysFromAddress(lastInvulnerable);
+
+        let nonce = await helper.chain.getNonce(superuser.address);
+        await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
+          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.addInvulnerable', [i.address], true, {nonce: nonce++})));
+
+        await expect(helper.getSudo().collatorSelection.addInvulnerable(superuser, lastInvulnerable.address))
+          .to.be.rejectedWith(/collatorSelection.TooManyInvulnerables/);
+
+        // restore the invulnerables to the previous state
+        nonce = await helper.chain.getNonce(superuser.address);
+        await Promise.all(newInvulnerables.map((i: IKeyringPair) =>
+          helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.removeInvulnerable', [i.address], true, {nonce: nonce++})));
+      });
+
+      itSub('Forbids a non-sudo to add an invulnerable', async ({helper}) => {
+        const [account] = await helper.arrange.createAccounts([10n], superuser);
+        const invulnerables = await helper.collatorSelection.getInvulnerables();
+
+        await helper.session.setOwnKeysFromAddress(account);
+        await expect(helper.collatorSelection.addInvulnerable(superuser, account.address))
+          .to.be.rejectedWith(/BadOrigin/);
+
+        const newInvulnerables = await helper.collatorSelection.getInvulnerables();
+        expect(newInvulnerables).to.be.members(invulnerables);
+      });
+
+      itSub('Forbids a non-sudo to remove an invulnerable', async ({helper}) => {
+        const invulnerables = await helper.collatorSelection.getInvulnerables();
+        await expect(helper.collatorSelection.removeInvulnerable(superuser, invulnerables[0]))
+          .to.be.rejectedWith(/BadOrigin/);
+        expect(await helper.collatorSelection.getInvulnerables()).to.have.all.members(invulnerables);
+      });
+
+      after(async function() {
+        await resetInvulnerables();
+      });
+    });
+  });
+
+  after(async function() {
+    if(!process.env.RUN_COLLATOR_TESTS) return;
+
+    await usingPlaygrounds(async (helper) => {
+      if(helper.fetchMissingPalletNames([Pallets.CollatorSelection]).length != 0) return;
+
+      await helper.getSudo().collatorSelection.setLicenseBond(superuser, previousLicenseBond);
+
+      const candidates = await helper.collatorSelection.getCandidates();
+      let nonce = await helper.chain.getNonce(superuser.address);
+      await Promise.all(candidates.map(candidate =>
+        helper.getSudo().executeExtrinsic(superuser, 'api.tx.collatorSelection.forceReleaseLicense', [candidate], true, {nonce: nonce++})));
+    });
+  });
+});
addedjs-packages/tests/sub/collator-selection/identity.seqtest.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/collator-selection/identity.seqtest.ts
@@ -0,0 +1,284 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, expect, itSub, Pallets, requirePalletsOrSkip} from '../../util/index.js';
+import {UniqueHelper} from '@unique/playgrounds/unique.js';
+
+async function getIdentities(helper: UniqueHelper) {
+  const identities: [string, any][] = [];
+  for(const [key, value] of await helper.getApi().query.identity.identityOf.entries())
+    identities.push([(key as any).toHuman(), (value as any).unwrap()]);
+  return identities;
+}
+
+async function getIdentityAccounts(helper: UniqueHelper) {
+  return (await getIdentities(helper)).flatMap(([key, _value]) => key);
+}
+
+async function getSubIdentityAccounts(helper: UniqueHelper, address: string) {
+  return ((await helper.getApi().query.identity.subsOf(address)).toHuman() as any)[1];
+}
+
+async function getSubIdentityName(helper: UniqueHelper, address: string) {
+  return ((await helper.getApi().query.identity.superOf(address)).toHuman() as any);
+}
+
+describe('Integration Test: Identities Manipulation', () => {
+  let superuser: IKeyringPair;
+
+  before(async function() {
+    if(!process.env.RUN_COLLATOR_TESTS) this.skip();
+
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.Identity]);
+      superuser = await privateKey('//Alice');
+    });
+  });
+
+  itSub('Normal calls do not work', async ({helper}) => {
+    // console.error = () => {};
+    await expect(helper.executeExtrinsic(superuser, 'api.tx.identity.setIdentity', [{info: {display: {Raw: 'Meowser'}}}] as any))
+      .to.be.rejectedWith(/Transaction call is not expected/);
+  });
+
+  describe('Identities', () => {
+    itSub('Sets identities', async ({helper}) => {
+      const oldIdentitiesCount = (await getIdentityAccounts(helper)).length;
+
+      const crowdSize = 10;
+      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
+      const identities = crowd.map((acc, i) => [acc.address, {info: {display: {Raw: `accounter #${i}`}}}]);
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
+
+      expect((await getIdentityAccounts(helper)).length).to.be.equal(oldIdentitiesCount + crowdSize);
+    });
+
+    itSub('Setting identities does not delete existing but does overwrite', async ({helper}) => {
+      const crowd = await helper.arrange.createCrowd(10, 0n, superuser);
+      const identities = crowd.map((acc, i) => [acc.address, {info: {display: {Raw: `accounter #${i}`}}}]);
+
+      // insert a single identity
+      let singleIdentity = identities.pop()!;
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [[singleIdentity]] as any);
+
+      const oldIdentitiesCount = (await getIdentityAccounts(helper)).length;
+
+      // change an identity and push it with a few new others
+      singleIdentity = [singleIdentity[0], {info: {display: {Raw: 'something special'}}}];
+      identities.push(singleIdentity);
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
+
+      // oldIdentitiesCount + 9 because one identity is overwritten, not inserted on top
+      expect((await getIdentityAccounts(helper)).length).to.be.equal(oldIdentitiesCount + 9);
+      expect((await helper.callRpc('api.query.identity.identityOf', [singleIdentity[0]])).toHuman().info.display)
+        .to.be.deep.equal({Raw: 'something special'});
+    });
+
+    itSub('Removes identities', async ({helper}) => {
+      const crowd = await helper.arrange.createCrowd(10, 0n, superuser);
+      const identities = crowd.map((acc, i) => [acc.address, {info: {display: {Raw: `accounter #${i}`}}}]);
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
+      const oldIdentities = await getIdentityAccounts(helper);
+
+      // delete a couple, check that they are no longer there
+      const scapegoats = [crowd.pop()!.address, crowd.pop()!.address];
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceRemoveIdentities', [scapegoats]);
+      const newIdentities = await getIdentityAccounts(helper);
+      expect(newIdentities.concat(scapegoats)).to.be.have.members(oldIdentities);
+    });
+  });
+
+  describe('Sub-identities', () => {
+    itSub('Sets subs', async ({helper}) => {
+      const crowdSize = 18;
+      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
+      const supers = [crowd.pop()!, crowd.pop()!, crowd.pop()!];
+
+      const subsPerSup = crowd.length / supers.length;
+      let subCount = 0;
+      const subs = [
+        crowd.slice(subCount, subCount += subsPerSup + 1),
+        crowd.slice(subCount, subCount += subsPerSup),
+        crowd.slice(subCount, subCount += subsPerSup - 1),
+      ];
+
+      const subsInfo = supers.map((acc, i) => [
+        acc.address, [
+          1000000n + BigInt(i + 1),
+          subs[i].map((sub, j) => [
+            sub.address, {Raw: `accounter #${j}`},
+          ]),
+        ],
+      ]);
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo] as any);
+
+      for(let i = 0; i < supers.length; i++) {
+        // check deposit
+        expect(((await helper.getApi().query.identity.subsOf(supers[i].address)).toJSON() as any)[0]).to.be.equal(1000001 + i);
+
+        const subsAccounts = await getSubIdentityAccounts(helper, supers[i].address);
+        // check sub-identities as account ids
+        expect(subsAccounts).to.include.members(subs[i].map(x => x.address));
+
+        for(let j = 0; j < subsAccounts.length; j++) {
+          // check sub-identities' names
+          expect((await getSubIdentityName(helper, subsAccounts[j]))[1]).to.be.deep.equal({Raw: `accounter #${j}`});
+        }
+      }
+    });
+
+    itSub('Setting sub-identities does not delete other existing but does overwrite own', async ({helper}) => {
+      const crowdSize = 18;
+      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
+      const supers = [crowd.pop()!, crowd.pop()!, crowd.pop()!];
+
+      const subsPerSup = crowd.length / supers.length;
+      let subCount = 0;
+      const subs = [
+        crowd.slice(subCount, subCount += subsPerSup + 1),
+        crowd.slice(subCount, subCount += subsPerSup),
+        crowd.slice(subCount, subCount += subsPerSup - 1),
+      ];
+
+      const subsInfo1 = supers.map((acc, i) => [
+        acc.address, [
+          1000000n + BigInt(i + 1),
+          subs[i].map((sub, j) => [
+            sub.address, {Raw: `accounter #${j}`},
+          ]),
+        ],
+      ]);
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo1] as any);
+
+      // change some sub-identities...
+      subs[2].pop(); subs[2].pop(); subs[2].push(...await helper.arrange.createAccounts([0n], superuser));
+
+      // ...and set them
+      const subsInfo2 = [[
+        supers[2].address, [
+          999999n,
+          subs[2].map((sub, j) => [
+            sub.address, {Raw: `discounter #${j}`},
+          ]),
+        ],
+      ]];
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo2] as any);
+
+      // make sure everything else is the same
+      for(let i = 0; i < supers.length - 1; i++) {
+        // check deposit
+        expect(((await helper.getApi().query.identity.subsOf(supers[i].address)).toJSON() as any)[0]).to.be.equal(1000001 + i);
+
+        const subsAccounts = await getSubIdentityAccounts(helper, supers[i].address);
+        // check sub-identities as account ids
+        expect(subsAccounts).to.include.members(subs[i].map(x => x.address));
+
+        for(let j = 0; j < subsAccounts; j++) {
+          // check sub-identities' names
+          expect((await getSubIdentityName(helper, subsAccounts[j]))[1]).to.be.deep.equal({Raw: `accounter #${j}`});
+        }
+      }
+
+      // check deposit
+      expect(((await helper.getApi().query.identity.subsOf(supers[2].address)).toJSON() as any)[0]).to.be.equal(999999);
+
+      const subsAccounts = await getSubIdentityAccounts(helper, supers[2].address);
+      // check sub-identities as account ids
+      expect(subsAccounts).to.include.members(subs[2].map(x => x.address));
+
+      for(let j = 0; j < subsAccounts.length; j++) {
+        // check sub-identities' names
+        expect((await getSubIdentityName(helper, subsAccounts[j]))[1]).to.be.deep.equal({Raw: `discounter #${j}`});
+      }
+    });
+
+    itSub('Removes sub-identities', async ({helper}) => {
+      const crowdSize = 3;
+      const crowd = await helper.arrange.createCrowd(crowdSize, 0n, superuser);
+      const sup = crowd.pop()!;
+
+      const subsInfo1 = [[
+        sup.address, [
+          1000000n,
+          crowd.map((sub, j) => [
+            sub.address, {Raw: `accounter #${j}`},
+          ]),
+        ],
+      ]];
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo1] as any);
+
+      // empty sub-identities should delete the records
+      const subsInfo2 = [[
+        sup.address, [
+          1000000n,
+          [],
+        ],
+      ]];
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo2] as any);
+
+      // check deposit
+      expect((await helper.getApi().query.identity.subsOf(sup.address)).toHuman()).to.be.deep.equal(['0', []]);
+
+      for(let j = 0; j < crowd.length; j++) {
+        // check sub-identities' names
+        expect((await getSubIdentityName(helper, crowd[j].address))).to.be.null;
+      }
+    });
+
+    itSub('Removing identities deletes associated sub-identities', async ({helper}) => {
+      const crowd = await helper.arrange.createCrowd(3, 0n, superuser);
+      const sup = crowd.pop()!;
+
+      // insert identity
+      const identities = [[sup.address, {info: {display: {Raw: 'mental'}}}]];
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceInsertIdentities', [identities] as any);
+
+      // and its sub-identities
+      const subsInfo = [[
+        sup.address, [
+          1000000n,
+          crowd.map((sub, j) => [
+            sub.address, {Raw: `accounter #${j}`},
+          ]),
+        ],
+      ]];
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceSetSubs', [subsInfo] as any);
+
+      // delete top identity
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceRemoveIdentities', [[sup.address]]);
+
+      // check that sub-identities are deleted
+      expect((await helper.getApi().query.identity.subsOf(sup.address)).toHuman()).to.be.deep.equal(['0', []]);
+
+      for(let j = 0; j < crowd.length; j++) {
+        // check sub-identities' names
+        expect((await getSubIdentityName(helper, crowd[j].address))).to.be.null;
+      }
+    });
+  });
+
+  after(async function() {
+    if(!process.env.RUN_COLLATOR_TESTS) return;
+
+    await usingPlaygrounds(async helper => {
+      if(helper.fetchMissingPalletNames([Pallets.Identity]).length != 0) return;
+
+      const identitiesToRemove: string[] = await getIdentityAccounts(helper);
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.identity.forceRemoveIdentities', [identitiesToRemove]);
+    });
+  });
+});
addedjs-packages/tests/sub/governance/council.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/governance/council.test.ts
@@ -0,0 +1,457 @@
+
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../../util/index.js';
+import {Event} from '@unique/playgrounds/unique.dev.js';
+import {initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyEnactmentPeriod, councilMotionDuration, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, initTechComm, clearFellowship, dummyProposal, dummyProposalCall, initFellowship, defaultEnactmentMoment, fellowshipPropositionOrigin} from './util.js';
+import type {ICounselors} from './util.js';
+
+describeGov('Governance: Council tests', () => {
+  let donor: IKeyringPair;
+  let counselors: ICounselors;
+  let sudoer: IKeyringPair;
+
+  const moreThanHalfCouncilThreshold = 3;
+
+  before(async function() {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.Council]);
+
+      donor = await privateKey({url: import.meta.url});
+      sudoer = await privateKey('//Alice');
+    });
+  });
+
+  beforeEach(async () => {
+    counselors = await initCouncil(donor, sudoer);
+  });
+
+  afterEach(async () => {
+    await clearCouncil(sudoer);
+    await clearTechComm(sudoer);
+  });
+
+  async function proposalFromMoreThanHalfCouncil(proposal: any) {
+    return await usingPlaygrounds(async (helper) => {
+      expect((await helper.callRpc('api.query.councilMembership.members')).toJSON().length).to.be.equal(5);
+      const proposeResult = await helper.council.collective.propose(
+        counselors.filip,
+        proposal,
+        moreThanHalfCouncilThreshold,
+      );
+
+      const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
+      const proposalIndex = councilProposedEvent.proposalIndex;
+      const proposalHash = councilProposedEvent.proposalHash;
+
+
+      await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
+      await helper.council.collective.vote(counselors.charu, proposalHash, proposalIndex, true);
+      await helper.council.collective.vote(counselors.filip, proposalHash, proposalIndex, true);
+
+      return await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
+    });
+  }
+
+  async function proposalFromAllCouncil(proposal: any) {
+    return await usingPlaygrounds(async (helper) => {
+      expect((await helper.callRpc('api.query.councilMembership.members')).toJSON().length).to.be.equal(5);
+      const proposeResult = await helper.council.collective.propose(
+        counselors.filip,
+        proposal,
+        moreThanHalfCouncilThreshold,
+      );
+
+      const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
+      const proposalIndex = councilProposedEvent.proposalIndex;
+      const proposalHash = councilProposedEvent.proposalHash;
+
+
+      await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
+      await helper.council.collective.vote(counselors.charu, proposalHash, proposalIndex, true);
+      await helper.council.collective.vote(counselors.ildar, proposalHash, proposalIndex, true);
+      await helper.council.collective.vote(counselors.irina, proposalHash, proposalIndex, true);
+      await helper.council.collective.vote(counselors.filip, proposalHash, proposalIndex, true);
+
+      return await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
+    });
+  }
+
+  itSub('>50% of Council can externally propose SuperMajorityAgainst', async ({helper}) => {
+    const forceSetBalanceReceiver = helper.arrange.createEmptyAccount();
+    const forceSetBalanceTestValue = 20n * 10n ** 25n;
+
+    const democracyProposal = await helper.constructApiCall('api.tx.balances.forceSetBalance', [
+      forceSetBalanceReceiver.address, forceSetBalanceTestValue,
+    ]);
+
+    const councilProposal = await helper.democracy.externalProposeDefaultCall(democracyProposal);
+
+    const proposeResult = await helper.council.collective.propose(
+      counselors.filip,
+      councilProposal,
+      moreThanHalfCouncilThreshold,
+    );
+
+    const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
+    const proposalIndex = councilProposedEvent.proposalIndex;
+    const proposalHash = councilProposedEvent.proposalHash;
+
+    await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
+    await helper.council.collective.vote(counselors.charu, proposalHash, proposalIndex, true);
+    await helper.council.collective.vote(counselors.filip, proposalHash, proposalIndex, true);
+
+    await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
+
+    const democracyStartedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+    const democracyReferendumIndex = democracyStartedEvent.referendumIndex;
+    const democracyThreshold = democracyStartedEvent.threshold;
+
+    expect(democracyThreshold).to.be.equal('SuperMajorityAgainst');
+
+    await helper.democracy.vote(counselors.filip, democracyReferendumIndex, {
+      Standard: {
+        vote: {
+          aye: true,
+          conviction: 1,
+        },
+        balance: 10_000n,
+      },
+    });
+
+    await helper.democracy.vote(counselors.charu, democracyReferendumIndex, {
+      Standard: {
+        vote: {
+          aye: false,
+          conviction: 1,
+        },
+        balance: 50_000n,
+      },
+    });
+
+    const passedReferendumEvent = await helper.wait.expectEvent(democracyVotingPeriod, Event.Democracy.Passed);
+    expect(passedReferendumEvent.referendumIndex).to.be.equal(democracyReferendumIndex);
+
+    await helper.wait.expectEvent(democracyEnactmentPeriod, Event.Scheduler.Dispatched);
+    const receiverBalance = await helper.balance.getSubstrate(forceSetBalanceReceiver.address);
+    expect(receiverBalance).to.be.equal(forceSetBalanceTestValue);
+  });
+
+  itSub('Council prime member vote is the default', async ({helper}) => {
+    const newTechCommMember = helper.arrange.createEmptyAccount();
+    const addMemberProposal = helper.technicalCommittee.membership.addMemberCall(newTechCommMember.address);
+    const proposeResult = await helper.council.collective.propose(
+      counselors.filip,
+      addMemberProposal,
+      moreThanHalfCouncilThreshold,
+    );
+
+    const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
+    const proposalIndex = councilProposedEvent.proposalIndex;
+    const proposalHash = councilProposedEvent.proposalHash;
+
+    await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
+
+    await helper.wait.newBlocks(councilMotionDuration);
+    const closeResult = await helper.council.collective.close(counselors.filip, proposalHash, proposalIndex);
+    const closeEvent = Event.Council.Closed.expect(closeResult);
+    const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON() as string[];
+    expect(closeEvent.yes).to.be.equal(members.length);
+  });
+
+  itSub('Superuser can add a member', async ({helper}) => {
+    const newMember = helper.arrange.createEmptyAccount();
+    await expect(helper.getSudo().council.membership.addMember(sudoer, newMember.address)).to.be.fulfilled;
+
+    const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
+    expect(members).to.contains(newMember.address);
+  });
+
+  itSub('Superuser can remove a member', async ({helper}) => {
+    await expect(helper.getSudo().council.membership.removeMember(sudoer, counselors.alex.address)).to.be.fulfilled;
+
+    const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
+    expect(members).to.not.contains(counselors.alex.address);
+  });
+
+  itSub('>50% Council can add TechComm member', async ({helper}) => {
+    const newTechCommMember = helper.arrange.createEmptyAccount();
+    const addMemberProposal = helper.technicalCommittee.membership.addMemberCall(newTechCommMember.address);
+
+    await proposalFromMoreThanHalfCouncil(addMemberProposal);
+
+    const techCommMembers = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
+    expect(techCommMembers).to.contains(newTechCommMember.address);
+  });
+
+  itSub('Council can remove TechComm member', async ({helper}) => {
+    const techComm = await initTechComm(donor, sudoer);
+    const removeMemberPrpoposal = helper.technicalCommittee.membership.removeMemberCall(techComm.andy.address);
+    await proposalFromMoreThanHalfCouncil(removeMemberPrpoposal);
+
+    const techCommMembers = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
+    expect(techCommMembers).to.not.contains(techComm.andy.address);
+  });
+
+  itSub.skip('Council member can add Fellowship member', async ({helper}) => {
+    const newFellowshipMember = helper.arrange.createEmptyAccount();
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.fellowship.collective.addMemberCall(newFellowshipMember.address),
+    )).to.be.fulfilled;
+    const fellowshipMembers = (await helper.callRpc('api.query.fellowshipCollective.members')).toJSON();
+    expect(fellowshipMembers).to.contains(newFellowshipMember.address);
+  });
+
+  itSub('>50% Council can promote Fellowship member', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+    const memberWithZeroRank = fellowship[0][0];
+
+    const proposal = helper.fellowship.collective.promoteCall(memberWithZeroRank.address);
+    await proposalFromMoreThanHalfCouncil(proposal);
+    const record = (await helper.callRpc('api.query.fellowshipCollective.members', [memberWithZeroRank.address])).toJSON();
+    expect(record).to.be.deep.equal({rank: 1});
+
+    await clearFellowship(sudoer);
+  });
+
+  itSub('>50% Council can demote Fellowship member', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+    const memberWithRankOne = fellowship[1][0];
+
+    const proposal = helper.fellowship.collective.demoteCall(memberWithRankOne.address);
+    await proposalFromMoreThanHalfCouncil(proposal);
+
+    const record = (await helper.callRpc('api.query.fellowshipCollective.members', [memberWithRankOne.address])).toJSON();
+    expect(record).to.be.deep.equal({rank: 0});
+
+    await clearFellowship(sudoer);
+  });
+
+  itSub('>50% Council can add\remove Fellowship member', async ({helper}) => {
+    try {
+      const newMember = helper.arrange.createEmptyAccount();
+
+      const proposalAdd = helper.fellowship.collective.addMemberCall(newMember.address);
+      const proposalRemove = helper.fellowship.collective.removeMemberCall(newMember.address, fellowshipRankLimit);
+      await expect(proposalFromMoreThanHalfCouncil(proposalAdd)).to.be.fulfilled;
+      expect(await helper.fellowship.collective.getMembers()).to.be.deep.contain(newMember.address);
+      await expect(proposalFromMoreThanHalfCouncil(proposalRemove)).to.be.fulfilled;
+      expect(await helper.fellowship.collective.getMembers()).to.be.not.deep.contain(newMember.address);
+    }
+    finally {
+      await clearFellowship(sudoer);
+    }
+  });
+
+  itSub('Council can blacklist Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await expect(proposalFromAllCouncil(helper.democracy.blacklistCall(preimageHash, null))).to.be.fulfilled;
+  });
+
+  itSub('Sudo can blacklist Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await expect(helper.getSudo().democracy.blacklist(sudoer, preimageHash)).to.be.fulfilled;
+  });
+
+  itSub('[Negative] Council cannot add Council member', async ({helper}) => {
+    const newCouncilMember = helper.arrange.createEmptyAccount();
+    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);
+
+    await expect(proposalFromAllCouncil(addMemberProposal)).to.be.rejected;
+  });
+
+  itSub('[Negative] Council cannot remove Council member', async ({helper}) => {
+    const removeMemberProposal = helper.council.membership.removeMemberCall(counselors.alex.address);
+
+    await expect(proposalFromAllCouncil(removeMemberProposal)).to.be.rejected;
+  });
+
+  itSub('[Negative] Council cannot submit regular democracy proposal', async ({helper}) => {
+    const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);
+
+    await expect(proposalFromAllCouncil(councilProposal)).to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Council cannot externally propose SimpleMajority', async ({helper}) => {
+    const councilProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));
+
+    await expect(proposalFromAllCouncil(councilProposal)).to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Council cannot externally propose SuperMajorityApprove', async ({helper}) => {
+    const councilProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));
+
+    await expect(proposalFromAllCouncil(councilProposal)).to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Council member cannot add/remove a Council member', async ({helper}) => {
+    const newCouncilMember = helper.arrange.createEmptyAccount();
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.council.membership.addMemberCall(newCouncilMember.address),
+    )).to.be.rejectedWith('BadOrigin');
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.council.membership.removeMemberCall(counselors.charu.address),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council cannot set/clear Council prime member', async ({helper}) => {
+    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);
+    const proposalForClear = await helper.council.membership.clearPrimeCall();
+
+    await expect(proposalFromAllCouncil(proposalForSet)).to.be.rejectedWith(/BadOrigin/);
+    await expect(proposalFromAllCouncil(proposalForClear)).to.be.rejectedWith(/BadOrigin/);
+
+  });
+
+  itSub('[Negative] Council member cannot set/clear Council prime member', async ({helper}) => {
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.council.membership.setPrimeCall(counselors.charu.address),
+    )).to.be.rejectedWith('BadOrigin');
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.council.membership.clearPrimeCall(),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council member cannot add/remove a TechComm member', async ({helper}) => {
+    const newTechCommMember = helper.arrange.createEmptyAccount();
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.technicalCommittee.membership.addMemberCall(newTechCommMember.address),
+    )).to.be.rejectedWith('BadOrigin');
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.technicalCommittee.membership.removeMemberCall(newTechCommMember.address),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council member cannot promote/demote a Fellowship member', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+    const memberWithRankOne = fellowship[1][0];
+
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.fellowship.collective.promoteCall(memberWithRankOne.address),
+    )).to.be.rejectedWith('BadOrigin');
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.fellowship.collective.demoteCall(memberWithRankOne.address),
+    )).to.be.rejectedWith('BadOrigin');
+    await clearFellowship(sudoer);
+  });
+
+  itSub('[Negative] Council cannot fast-track Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await expect(proposalFromAllCouncil(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0)))
+      .to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Council member cannot fast-track Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council cannot cancel Democracy proposals', async ({helper}) => {
+    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
+    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
+
+    await expect(proposalFromAllCouncil(helper.democracy.cancelProposalCall(proposalIndex)))
+      .to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Council member cannot cancel Democracy proposals', async ({helper}) => {
+
+    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
+    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
+
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.democracy.cancelProposalCall(proposalIndex),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council cannot cancel ongoing Democracy referendums', async ({helper}) => {
+    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
+    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+    const referendumIndex = startedEvent.referendumIndex;
+
+    await expect(proposalFromAllCouncil(helper.democracy.emergencyCancelCall(referendumIndex)))
+      .to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Council member cannot cancel ongoing Democracy referendums', async ({helper}) => {
+    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
+    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+    const referendumIndex = startedEvent.referendumIndex;
+
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.democracy.emergencyCancelCall(referendumIndex),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council cannot cancel Fellowship referendums', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+    const fellowshipProposer = fellowship[5][0];
+    const proposal = dummyProposal(helper);
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      fellowshipProposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+
+    await expect(proposalFromAllCouncil(helper.fellowship.referenda.cancelCall(referendumIndex)))
+      .to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Council member cannot cancel Fellowship referendums', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+    const fellowshipProposer = fellowship[5][0];
+    const proposal = dummyProposal(helper);
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      fellowshipProposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+    await expect(helper.council.collective.execute(
+      counselors.alex,
+      helper.fellowship.referenda.cancelCall(referendumIndex),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] Council referendum cannot be closed until the voting threshold is met', async ({helper}) => {
+    const councilSize = (await helper.callRpc('api.query.councilMembership.members')).toJSON().length as any as number;
+    expect(councilSize).is.greaterThan(1);
+    const proposeResult = await helper.council.collective.propose(
+      counselors.filip,
+      dummyProposalCall(helper),
+      councilSize,
+    );
+
+    const councilProposedEvent = Event.Council.Proposed.expect(proposeResult);
+    const proposalIndex = councilProposedEvent.proposalIndex;
+    const proposalHash = councilProposedEvent.proposalHash;
+
+
+    await helper.council.collective.vote(counselors.alex, proposalHash, proposalIndex, true);
+    await expect(helper.council.collective.close(counselors.filip, proposalHash, proposalIndex)).to.be.rejectedWith('TooEarly');
+  });
+
+});
addedjs-packages/tests/sub/governance/democracy.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/governance/democracy.test.ts
@@ -0,0 +1,89 @@
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../../util/index.js';
+import {clearFellowship, democracyLaunchPeriod, democracyTrackMinRank, dummyProposalCall, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, fellowshipPreparePeriod, fellowshipPropositionOrigin, initFellowship, voteUnanimouslyInFellowship} from './util.js';
+import {Event} from '@unique/playgrounds/unique.dev.js';
+
+describeGov('Governance: Democracy tests', () => {
+  let regularUser: IKeyringPair;
+  let donor: IKeyringPair;
+  let sudoer: IKeyringPair;
+
+  before(async function() {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.Democracy]);
+
+      donor = await privateKey({url: import.meta.url});
+      sudoer = await privateKey('//Alice');
+
+      [regularUser] = await helper.arrange.createAccounts([1000n], donor);
+    });
+  });
+
+  itSub('Regular user can vote', async ({helper}) => {
+    const fellows = await initFellowship(donor, sudoer);
+    const rank1Proposer = fellows[1][0];
+
+    const democracyProposalCall = dummyProposalCall(helper);
+    const fellowshipProposal = {
+      Inline: helper.democracy.proposeCall(democracyProposalCall, 0n).method.toHex(),
+    };
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      rank1Proposer,
+      fellowshipPropositionOrigin,
+      fellowshipProposal,
+      {After: 0},
+    );
+
+    const fellowshipReferendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+    await voteUnanimouslyInFellowship(helper, fellows, democracyTrackMinRank, fellowshipReferendumIndex);
+    await helper.fellowship.referenda.placeDecisionDeposit(donor, fellowshipReferendumIndex);
+
+    await helper.wait.expectEvent(
+      fellowshipPreparePeriod + fellowshipConfirmPeriod + fellowshipMinEnactPeriod,
+      Event.Democracy.Proposed,
+    );
+
+    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+    const referendumIndex = startedEvent.referendumIndex;
+
+    const ayeBalance = 10_000n;
+
+    await helper.democracy.vote(regularUser, referendumIndex, {
+      Standard: {
+        vote: {
+          aye: true,
+          conviction: 1,
+        },
+        balance: ayeBalance,
+      },
+    });
+
+    const referendumInfo = await helper.democracy.referendumInfo(referendumIndex);
+    const tally = referendumInfo.ongoing.tally;
+
+    expect(BigInt(tally.ayes)).to.be.equal(ayeBalance);
+
+    await clearFellowship(sudoer);
+  });
+
+  itSub('[Negative] Regular user cannot submit a regular proposal', async ({helper}) => {
+    const submitResult = helper.democracy.propose(regularUser, dummyProposalCall(helper), 0n);
+    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Regular user cannot externally propose SuperMajorityAgainst', async ({helper}) => {
+    const submitResult = helper.democracy.externalProposeDefault(regularUser, dummyProposalCall(helper));
+    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Regular user cannot externally propose SimpleMajority', async ({helper}) => {
+    const submitResult = helper.democracy.externalProposeMajority(regularUser, dummyProposalCall(helper));
+    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Regular user cannot externally propose SuperMajorityApprove', async ({helper}) => {
+    const submitResult = helper.democracy.externalPropose(regularUser, dummyProposalCall(helper));
+    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
+  });
+});
addedjs-packages/tests/sub/governance/fellowship.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/governance/fellowship.test.ts
@@ -0,0 +1,335 @@
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../../util/index.js';
+import {DevUniqueHelper, Event} from '@unique/playgrounds/unique.dev.js';
+import {initCouncil, democracyLaunchPeriod, democracyVotingPeriod, democracyFastTrackVotingPeriod, fellowshipRankLimit, clearCouncil, clearTechComm, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, voteUnanimouslyInFellowship, democracyTrackMinRank, fellowshipPreparePeriod, fellowshipConfirmPeriod, fellowshipMinEnactPeriod, democracyTrackId, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util.js';
+import type {ICounselors, ITechComms} from './util.js';
+
+describeGov('Governance: Fellowship tests', () => {
+  let members: IKeyringPair[][];
+
+  let rank1Proposer: IKeyringPair;
+
+  let sudoer: any;
+  let donor: any;
+  let counselors: ICounselors;
+  let techcomms: ITechComms;
+
+  const submissionDeposit = 1000n;
+
+  async function testBadFellowshipProposal(
+    helper: DevUniqueHelper,
+    proposalCall: any,
+  ) {
+    const badProposal = {
+      Inline: proposalCall.method.toHex(),
+    };
+    const submitResult = await helper.fellowship.referenda.submit(
+      rank1Proposer,
+      fellowshipPropositionOrigin,
+      badProposal,
+      defaultEnactmentMoment,
+    );
+
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+    await voteUnanimouslyInFellowship(helper, members, democracyTrackMinRank, referendumIndex);
+    await helper.fellowship.referenda.placeDecisionDeposit(donor, referendumIndex);
+
+    const enactmentId = await helper.fellowship.referenda.enactmentEventId(referendumIndex);
+    const dispatchedEvent = await helper.wait.expectEvent(
+      fellowshipPreparePeriod + fellowshipConfirmPeriod + defaultEnactmentMoment.After,
+      Event.Scheduler.Dispatched,
+      (event: any) => event.id == enactmentId,
+    );
+
+    expect(dispatchedEvent.result.isErr, 'Bad Fellowship must fail')
+      .to.be.true;
+
+    expect(dispatchedEvent.result.asErr.isBadOrigin, 'Bad Fellowship must fail with BadOrigin')
+      .to.be.true;
+  }
+
+  before(async function() {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.Democracy, Pallets.Fellowship, Pallets.TechnicalCommittee, Pallets.Council]);
+
+      sudoer = await privateKey('//Alice');
+      donor = await privateKey({url: import.meta.url});
+    });
+
+    counselors = await initCouncil(donor, sudoer);
+    techcomms = await initTechComm(donor, sudoer);
+    members = await initFellowship(donor, sudoer);
+
+    rank1Proposer = members[1][0];
+  });
+
+  after(async () => {
+    await clearFellowship(sudoer);
+    await clearTechComm(sudoer);
+    await clearCouncil(sudoer);
+    await hardResetFellowshipReferenda(sudoer);
+    await hardResetDemocracy(sudoer);
+    await hardResetGovScheduler(sudoer);
+  });
+
+  itSub('FellowshipProposition can submit regular Democracy proposals', async ({helper}) => {
+    const democracyProposalCall = dummyProposalCall(helper);
+    const fellowshipProposal = {
+      Inline: helper.democracy.proposeCall(democracyProposalCall, 0n).method.toHex(),
+    };
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      rank1Proposer,
+      fellowshipPropositionOrigin,
+      fellowshipProposal,
+      defaultEnactmentMoment,
+    );
+
+    const fellowshipReferendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+    await voteUnanimouslyInFellowship(helper, members, democracyTrackMinRank, fellowshipReferendumIndex);
+    await helper.fellowship.referenda.placeDecisionDeposit(donor, fellowshipReferendumIndex);
+
+    const democracyProposed = await helper.wait.expectEvent(
+      fellowshipPreparePeriod + fellowshipConfirmPeriod + fellowshipMinEnactPeriod,
+      Event.Democracy.Proposed,
+    );
+
+    const democracyEnqueuedProposal = await helper.democracy.expectPublicProposal(democracyProposed.proposalIndex);
+    expect(democracyEnqueuedProposal.inline, 'Fellowship proposal expected to be in the Democracy')
+      .to.be.equal(democracyProposalCall.method.toHex());
+
+    await helper.wait.newBlocks(democracyVotingPeriod);
+  });
+
+  itSub('Fellowship (rank-1 or greater) member can submit Fellowship proposals on the Democracy track', async ({helper}) => {
+    for(let rank = 1; rank < fellowshipRankLimit; rank++) {
+      const rankMembers = members[rank];
+
+      for(let memberIdx = 0; memberIdx < rankMembers.length; memberIdx++) {
+        const member = rankMembers[memberIdx];
+        const newDummyProposal = dummyProposal(helper);
+
+        const submitResult = await helper.fellowship.referenda.submit(
+          member,
+          fellowshipPropositionOrigin,
+          newDummyProposal,
+          defaultEnactmentMoment,
+        );
+
+        const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+        const referendumInfo = await helper.fellowship.referenda.referendumInfo(referendumIndex);
+        expect(referendumInfo.ongoing.track, `${memberIdx}-th member of rank #${rank}: proposal #${referendumIndex} is on invalid track`)
+          .to.be.equal(democracyTrackId);
+      }
+    }
+  });
+
+  itSub(`Fellowship (rank-${democracyTrackMinRank} or greater) members can vote on the Democracy track`, async ({helper}) => {
+    const proposal = dummyProposal(helper);
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      rank1Proposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+
+    let expectedAyes = 0;
+    for(let rank = democracyTrackMinRank; rank < fellowshipRankLimit; rank++) {
+      const rankMembers = members[rank];
+
+      for(let memberIdx = 0; memberIdx < rankMembers.length; memberIdx++) {
+        const member = rankMembers[memberIdx];
+        await helper.fellowship.collective.vote(member, referendumIndex, true);
+        expectedAyes += 1;
+
+        const referendumInfo = await helper.fellowship.referenda.referendumInfo(referendumIndex);
+        expect(referendumInfo.ongoing.tally.bareAyes, `Vote from ${memberIdx}-th member of rank #${rank} isn't accounted`)
+          .to.be.equal(expectedAyes);
+      }
+    }
+  });
+
+  itSub('Fellowship rank vote strength is correct', async ({helper}) => {
+    const excessRankWeightTable = [
+      1,
+      3,
+      6,
+      10,
+      15,
+      21,
+    ];
+
+    const proposal = dummyProposal(helper);
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      rank1Proposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+
+    for(let rank = democracyTrackMinRank; rank < fellowshipRankLimit; rank++) {
+      const rankMembers = members[rank];
+
+      for(let memberIdx = 0; memberIdx < rankMembers.length; memberIdx++) {
+        const member = rankMembers[memberIdx];
+
+        const referendumInfoBefore = await helper.fellowship.referenda.referendumInfo(referendumIndex);
+        const ayesBefore = referendumInfoBefore.ongoing.tally.ayes;
+
+        await helper.fellowship.collective.vote(member, referendumIndex, true);
+
+        const referendumInfoAfter = await helper.fellowship.referenda.referendumInfo(referendumIndex);
+        const ayesAfter = referendumInfoAfter.ongoing.tally.ayes;
+
+        const expectedVoteWeight = excessRankWeightTable[rank - democracyTrackMinRank];
+        const voteWeight = ayesAfter - ayesBefore;
+
+        expect(voteWeight, `Vote weight of ${memberIdx}-th member of rank #${rank} is invalid`)
+          .to.be.equal(expectedVoteWeight);
+      }
+    }
+  });
+
+  itSub('[Negative] FellowshipProposition cannot externally propose SuperMajorityAgainst', async ({helper}) => {
+    await testBadFellowshipProposal(helper, helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper)));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot externally propose SimpleMajority', async ({helper}) => {
+    await testBadFellowshipProposal(helper, helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper)));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot externally propose SuperMajorityApprove', async ({helper}) => {
+    await testBadFellowshipProposal(helper, helper.democracy.externalProposeCall(dummyProposalCall(helper)));
+  });
+
+  itSub('[Negative] Fellowship (rank-0) member cannot submit Fellowship proposals on the Democracy track', async ({helper}) => {
+    const rank0Proposer = members[0][0];
+
+    const proposal = dummyProposal(helper);
+
+    const submitResult = helper.fellowship.referenda.submit(
+      rank0Proposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+
+    await expect(submitResult).to.be.rejectedWith(/BadOrigin/);
+  });
+
+  itSub('[Negative] Fellowship (rank-1 or greater) member cannot submit if no deposit can be provided', async ({helper}) => {
+    const poorMember = rank1Proposer;
+
+    const balanceBefore = await helper.balance.getSubstrate(poorMember.address);
+    await helper.getSudo().balance.setBalanceSubstrate(sudoer, poorMember.address, submissionDeposit - 1n);
+
+    const proposal = dummyProposal(helper);
+
+    const submitResult = helper.fellowship.referenda.submit(
+      poorMember,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+
+    await expect(submitResult).to.be.rejectedWith(/account balance too low/);
+
+    await helper.getSudo().balance.setBalanceSubstrate(sudoer, poorMember.address, balanceBefore);
+  });
+
+  itSub(`[Negative] Fellowship (rank-${democracyTrackMinRank - 1} or less) members cannot vote on the Democracy track`, async ({helper}) => {
+    const proposal = dummyProposal(helper);
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      rank1Proposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+
+    for(let rank = 0; rank < democracyTrackMinRank; rank++) {
+      for(const member of members[rank]) {
+        const voteResult = helper.fellowship.collective.vote(member, referendumIndex, true);
+        await expect(voteResult).to.be.rejectedWith(/RankTooLow/);
+      }
+    }
+  });
+
+  itSub('[Negative] FellowshipProposition cannot add/remove a Council member', async ({helper}) => {
+    const [councilNonMember] = await helper.arrange.createAccounts([10n], donor);
+
+    await testBadFellowshipProposal(helper, helper.council.membership.addMemberCall(councilNonMember.address));
+    await testBadFellowshipProposal(helper, helper.council.membership.removeMemberCall(counselors.ildar.address));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot set/clear Council prime member', async ({helper}) => {
+    await testBadFellowshipProposal(helper, helper.council.membership.setPrimeCall(counselors.ildar.address));
+    await testBadFellowshipProposal(helper, helper.council.membership.clearPrimeCall());
+  });
+
+  itSub('[Negative] FellowshipProposition cannot add/remove a TechComm member', async ({helper}) => {
+    const [techCommNonMember] = await helper.arrange.createAccounts([10n], donor);
+
+    await testBadFellowshipProposal(helper, helper.technicalCommittee.membership.addMemberCall(techCommNonMember.address));
+    await testBadFellowshipProposal(helper, helper.technicalCommittee.membership.removeMemberCall(techcomms.constantine.address));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot add/remove a Fellowship member', async ({helper}) => {
+    const [fellowshipNonMember] = await helper.arrange.createAccounts([10n], donor);
+
+    await testBadFellowshipProposal(helper, helper.fellowship.collective.addMemberCall(fellowshipNonMember.address));
+    await testBadFellowshipProposal(helper, helper.fellowship.collective.removeMemberCall(rank1Proposer.address, 1));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot promote/demote a Fellowship member', async ({helper}) => {
+    await testBadFellowshipProposal(helper, helper.fellowship.collective.promoteCall(rank1Proposer.address));
+    await testBadFellowshipProposal(helper, helper.fellowship.collective.demoteCall(rank1Proposer.address));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot fast-track Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await testBadFellowshipProposal(helper, helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot cancel Democracy proposals', async ({helper}) => {
+    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
+    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
+
+    await testBadFellowshipProposal(helper, helper.democracy.cancelProposalCall(proposalIndex));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot cancel ongoing Democracy referendums', async ({helper}) => {
+    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
+    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+    const referendumIndex = startedEvent.referendumIndex;
+
+    await testBadFellowshipProposal(helper, helper.democracy.emergencyCancelCall(referendumIndex));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot blacklist Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await testBadFellowshipProposal(helper, helper.democracy.blacklistCall(preimageHash, null));
+  });
+
+  itSub('[Negative] FellowshipProposition cannot veto external proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await testBadFellowshipProposal(helper, helper.democracy.vetoExternalCall(preimageHash));
+  });
+});
addedjs-packages/tests/sub/governance/init.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/governance/init.test.ts
@@ -0,0 +1,193 @@
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../../util/index.js';
+import {Event} from '@unique/playgrounds/unique.dev.js';
+import {democracyLaunchPeriod, democracyVotingPeriod, democracyEnactmentPeriod, clearCouncil, clearTechComm, clearFellowship} from './util.js';
+import type {ICounselors, ITechComms} from './util.js';
+
+describeGov('Governance: Initialization', () => {
+  let donor: IKeyringPair;
+  let sudoer: IKeyringPair;
+  let counselors: ICounselors;
+  let techcomms: ITechComms;
+  let coreDevs: any;
+
+  const expectedAlexFellowRank = 7;
+  const expectedFellowRank = 6;
+
+  before(async function() {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.Democracy, Pallets.Council, Pallets.TechnicalCommittee]);
+
+      const councilMembers = await helper.council.membership.getMembers();
+      const techcommMembers = await helper.technicalCommittee.membership.getMembers();
+      expect(councilMembers.length == 0, 'The Council must be empty before the Gov Init');
+      expect(techcommMembers.length == 0, 'The Technical Commettee must be empty before the Gov Init');
+
+      donor = await privateKey({url: import.meta.url});
+      sudoer = await privateKey('//Alice');
+
+      const counselorsNum = 5;
+      const techCommsNum = 3;
+      const coreDevsNum = 2;
+      const [
+        alex,
+        ildar,
+        charu,
+        filip,
+        irina,
+
+        greg,
+        andy,
+        constantine,
+
+        yaroslav,
+        daniel,
+      ] = await helper.arrange.createAccounts(new Array(counselorsNum + techCommsNum + coreDevsNum).fill(10_000n), donor);
+
+      counselors = {
+        alex,
+        ildar,
+        charu,
+        filip,
+        irina,
+      };
+
+      techcomms = {
+        greg,
+        andy,
+        constantine,
+      };
+
+      coreDevs = {
+        yaroslav: yaroslav,
+        daniel: daniel,
+      };
+    });
+  });
+
+  itSub('Initialize Governance', async ({helper}) => {
+    const promoteFellow = (fellow: string, promotionsNum: number) => new Array(promotionsNum).fill(helper.fellowship.collective.promoteCall(fellow));
+
+    const expectFellowRank = async (fellow: string, expectedRank: number) => {
+      expect(await helper.fellowship.collective.getMemberRank(fellow)).to.be.equal(expectedRank);
+    };
+
+    console.log('\t- Setup the Prime of the Council via sudo');
+    await helper.getSudo().utility.batchAll(sudoer, [
+      helper.council.membership.addMemberCall(counselors.alex.address),
+      helper.council.membership.setPrimeCall(counselors.alex.address),
+
+      helper.fellowship.collective.addMemberCall(counselors.alex.address),
+      ...promoteFellow(counselors.alex.address, expectedAlexFellowRank),
+    ]);
+
+    let councilMembers = await helper.council.membership.getMembers();
+    const councilPrime = await helper.council.collective.getPrimeMember();
+    const alexFellowRank = await helper.fellowship.collective.getMemberRank(counselors.alex.address);
+    expect(councilMembers).to.be.deep.equal([counselors.alex.address]);
+    expect(councilPrime).to.be.equal(counselors.alex.address);
+    expect(alexFellowRank).to.be.equal(expectedAlexFellowRank);
+
+    console.log('\t- The Council Prime initializes the Technical Commettee');
+    const councilProposalThreshold = 1;
+
+    await helper.council.collective.propose(
+      counselors.alex,
+      helper.utility.batchAllCall([
+        helper.technicalCommittee.membership.addMemberCall(techcomms.greg.address),
+        helper.technicalCommittee.membership.addMemberCall(techcomms.andy.address),
+        helper.technicalCommittee.membership.addMemberCall(techcomms.constantine.address),
+
+        helper.technicalCommittee.membership.setPrimeCall(techcomms.greg.address),
+      ]),
+      councilProposalThreshold,
+    );
+
+    const techCommMembers = await helper.technicalCommittee.membership.getMembers();
+    const techCommPrime = await helper.technicalCommittee.membership.getPrimeMember();
+    const expectedTechComms = [techcomms.greg.address, techcomms.andy.address, techcomms.constantine.address];
+    expect(techCommMembers.length).to.be.equal(expectedTechComms.length);
+    expect(techCommMembers).to.containSubset(expectedTechComms);
+    expect(techCommPrime).to.be.equal(techcomms.greg.address);
+
+    console.log('\t- The Council Prime initiates a referendum to add counselors');
+    const returnPreimageHash = true;
+    const preimageHash = await helper.preimage.notePreimageFromCall(counselors.alex, helper.utility.batchAllCall([
+      helper.council.membership.addMemberCall(counselors.ildar.address),
+      helper.council.membership.addMemberCall(counselors.charu.address),
+      helper.council.membership.addMemberCall(counselors.filip.address),
+      helper.council.membership.addMemberCall(counselors.irina.address),
+
+      helper.fellowship.collective.addMemberCall(counselors.charu.address),
+      helper.fellowship.collective.addMemberCall(counselors.ildar.address),
+      helper.fellowship.collective.addMemberCall(counselors.irina.address),
+      helper.fellowship.collective.addMemberCall(counselors.filip.address),
+      helper.fellowship.collective.addMemberCall(techcomms.greg.address),
+      helper.fellowship.collective.addMemberCall(techcomms.andy.address),
+      helper.fellowship.collective.addMemberCall(techcomms.constantine.address),
+      helper.fellowship.collective.addMemberCall(coreDevs.yaroslav.address),
+      helper.fellowship.collective.addMemberCall(coreDevs.daniel.address),
+
+      ...promoteFellow(counselors.charu.address, expectedFellowRank),
+      ...promoteFellow(counselors.ildar.address, expectedFellowRank),
+      ...promoteFellow(counselors.irina.address, expectedFellowRank),
+      ...promoteFellow(counselors.filip.address, expectedFellowRank),
+      ...promoteFellow(techcomms.greg.address, expectedFellowRank),
+      ...promoteFellow(techcomms.andy.address, expectedFellowRank),
+      ...promoteFellow(techcomms.constantine.address, expectedFellowRank),
+      ...promoteFellow(coreDevs.yaroslav.address, expectedFellowRank),
+      ...promoteFellow(coreDevs.daniel.address, expectedFellowRank),
+    ]), returnPreimageHash);
+
+    await helper.council.collective.propose(
+      counselors.alex,
+      helper.democracy.externalProposeDefaultWithPreimageCall(preimageHash),
+      councilProposalThreshold,
+    );
+
+    console.log('\t- The referendum is being decided');
+    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+
+    await helper.democracy.vote(counselors.filip, startedEvent.referendumIndex, {
+      Standard: {
+        vote: {
+          aye: true,
+          conviction: 1,
+        },
+        balance: 10_000n,
+      },
+    });
+
+    const passedReferendumEvent = await helper.wait.expectEvent(democracyVotingPeriod, Event.Democracy.Passed);
+    expect(passedReferendumEvent.referendumIndex).to.be.equal(startedEvent.referendumIndex);
+
+    await helper.wait.expectEvent(democracyEnactmentPeriod, Event.Scheduler.Dispatched);
+
+    councilMembers = await helper.council.membership.getMembers();
+    const expectedCounselors = [
+      counselors.alex.address,
+      counselors.ildar.address,
+      counselors.charu.address,
+      counselors.filip.address,
+      counselors.irina.address,
+    ];
+    expect(councilMembers.length).to.be.equal(expectedCounselors.length);
+    expect(councilMembers).to.containSubset(expectedCounselors);
+
+    await expectFellowRank(counselors.ildar.address, expectedFellowRank);
+    await expectFellowRank(counselors.charu.address, expectedFellowRank);
+    await expectFellowRank(counselors.filip.address, expectedFellowRank);
+    await expectFellowRank(counselors.irina.address, expectedFellowRank);
+    await expectFellowRank(techcomms.greg.address, expectedFellowRank);
+    await expectFellowRank(techcomms.andy.address, expectedFellowRank);
+    await expectFellowRank(techcomms.constantine.address, expectedFellowRank);
+    await expectFellowRank(coreDevs.yaroslav.address, expectedFellowRank);
+    await expectFellowRank(coreDevs.daniel.address, expectedFellowRank);
+  });
+
+  after(async function() {
+    await clearFellowship(sudoer);
+    await clearTechComm(sudoer);
+    await clearCouncil(sudoer);
+  });
+});
addedjs-packages/tests/sub/governance/technicalCommittee.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/governance/technicalCommittee.test.ts
@@ -0,0 +1,383 @@
+import type {IKeyringPair} from '@polkadot/types/types';
+import {usingPlaygrounds, itSub, expect, Pallets, requirePalletsOrSkip, describeGov} from '../../util/index.js';
+import {Event} from '@unique/playgrounds/unique.dev.js';
+import {initCouncil, democracyLaunchPeriod, democracyFastTrackVotingPeriod, clearCouncil, clearTechComm, clearFellowship, defaultEnactmentMoment, dummyProposal, dummyProposalCall, fellowshipPropositionOrigin, initFellowship, initTechComm, hardResetFellowshipReferenda, hardResetDemocracy, hardResetGovScheduler} from './util.js';
+import type {ITechComms} from './util.js';
+
+describeGov('Governance: Technical Committee tests', () => {
+  let sudoer: IKeyringPair;
+  let techcomms: ITechComms;
+  let donor: IKeyringPair;
+  let preImageHash: string;
+
+
+  const allTechCommitteeThreshold = 3;
+
+  before(async function() {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.TechnicalCommittee]);
+      sudoer = await privateKey('//Alice');
+      donor = await privateKey({url: import.meta.url});
+
+      techcomms = await initTechComm(donor, sudoer);
+
+      const proposalCall = await helper.constructApiCall('api.tx.balances.forceSetBalance', [donor.address, 20n * 10n ** 25n]);
+      preImageHash = await helper.preimage.notePreimageFromCall(sudoer, proposalCall, true);
+    });
+  });
+
+  after(async () => {
+    await usingPlaygrounds(async (helper) => {
+      await clearTechComm(sudoer);
+
+      await helper.preimage.unnotePreimage(sudoer, preImageHash);
+      await hardResetFellowshipReferenda(sudoer);
+      await hardResetDemocracy(sudoer);
+      await hardResetGovScheduler(sudoer);
+    });
+  });
+
+  function proposalFromAllCommittee(proposal: any) {
+    return usingPlaygrounds(async (helper) => {
+      expect((await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length).to.be.equal(allTechCommitteeThreshold);
+      const proposeResult = await helper.technicalCommittee.collective.propose(
+        techcomms.andy,
+        proposal,
+        allTechCommitteeThreshold,
+      );
+
+      const commiteeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);
+      const proposalIndex = commiteeProposedEvent.proposalIndex;
+      const proposalHash = commiteeProposedEvent.proposalHash;
+
+
+      await helper.technicalCommittee.collective.vote(techcomms.andy, proposalHash, proposalIndex, true);
+      await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);
+      await helper.technicalCommittee.collective.vote(techcomms.greg, proposalHash, proposalIndex, true);
+
+      const closeResult = await helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex);
+      Event.TechnicalCommittee.Closed.expect(closeResult);
+      Event.TechnicalCommittee.Approved.expect(closeResult);
+      const {result} = Event.TechnicalCommittee.Executed.expect(closeResult);
+      expect(result).to.eq('Ok');
+
+      return closeResult;
+    });
+  }
+
+  itSub('TechComm can fast-track Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.wait.parachainBlockMultiplesOf(35n);
+
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    const fastTrackProposal = await proposalFromAllCommittee(helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0));
+    Event.Democracy.Started.expect(fastTrackProposal);
+  });
+
+  itSub('TechComm can cancel Democracy proposals', async ({helper}) => {
+    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
+    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
+
+    const cancelProposal = await proposalFromAllCommittee(helper.democracy.cancelProposalCall(proposalIndex));
+    Event.Democracy.ProposalCanceled.expect(cancelProposal);
+  });
+
+  itSub('TechComm can cancel ongoing Democracy referendums', async ({helper}) => {
+    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
+    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+    const referendumIndex = startedEvent.referendumIndex;
+
+    const emergencyCancelProposal = await proposalFromAllCommittee(helper.democracy.emergencyCancelCall(referendumIndex));
+    Event.Democracy.Cancelled.expect(emergencyCancelProposal);
+  });
+
+  itSub('TechComm member can veto Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    const vetoExternalCall = await helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.democracy.vetoExternalCall(preimageHash),
+    );
+    Event.Democracy.Vetoed.expect(vetoExternalCall);
+  });
+
+  itSub('TechComm can cancel Fellowship referendums', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+    const fellowshipProposer = fellowship[5][0];
+    const proposal = dummyProposal(helper);
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      fellowshipProposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+    const cancelProposal = await proposalFromAllCommittee(helper.fellowship.referenda.cancelCall(referendumIndex));
+    Event.FellowshipReferenda.Cancelled.expect(cancelProposal);
+  });
+
+  itSub.skip('TechComm member can add a Fellowship member', async ({helper}) => {
+    const newFellowshipMember = helper.arrange.createEmptyAccount();
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.fellowship.collective.addMemberCall(newFellowshipMember.address),
+    )).to.be.fulfilled;
+    const fellowshipMembers = (await helper.callRpc('api.query.fellowshipCollective.members')).toJSON();
+    expect(fellowshipMembers).to.contains(newFellowshipMember.address);
+    await clearFellowship(sudoer);
+  });
+
+  itSub('[Negative] TechComm cannot submit regular democracy proposal', async ({helper}) => {
+    const councilProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);
+
+    await expect(proposalFromAllCommittee(councilProposal)).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm cannot externally propose SuperMajorityAgainst', async ({helper}) => {
+    const commiteeProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));
+
+    await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm cannot externally propose SimpleMajority', async ({helper}) => {
+    const commiteeProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));
+
+    await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm cannot externally propose SuperMajorityApprove', async ({helper}) => {
+    const commiteeProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));
+
+    await expect(proposalFromAllCommittee(commiteeProposal)).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot submit regular democracy proposal', async ({helper}) => {
+    const memberProposal = await helper.democracy.proposeCall(dummyProposalCall(helper), 0n);
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      memberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot externally propose SuperMajorityAgainst', async ({helper}) => {
+    const memberProposal = await helper.democracy.externalProposeDefaultCall(dummyProposalCall(helper));
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      memberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot externally propose SimpleMajority', async ({helper}) => {
+    const memberProposal = await helper.democracy.externalProposeMajorityCall(dummyProposalCall(helper));
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      memberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot externally propose SuperMajorityApprove', async ({helper}) => {
+    const memberProposal = await helper.democracy.externalProposeCall(dummyProposalCall(helper));
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      memberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+
+  itSub.skip('[Negative] TechComm cannot promote/demote Fellowship member', async () => {
+
+  });
+
+  itSub.skip('[Negative] TechComm member cannot promote/demote Fellowship member', async () => {
+
+  });
+
+  itSub('[Negative] TechComm cannot add/remove a Council member', async ({helper}) => {
+    const newCouncilMember = helper.arrange.createEmptyAccount();
+    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);
+    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);
+
+    await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');
+    await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot add/remove a Council member', async ({helper}) => {
+    const newCouncilMember = helper.arrange.createEmptyAccount();
+    const addMemberProposal = helper.council.membership.addMemberCall(newCouncilMember.address);
+    const removeMemberProposal = helper.council.membership.removeMemberCall(newCouncilMember.address);
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      addMemberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      removeMemberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm cannot set/clear Council prime member', async ({helper}) => {
+    const counselors = await initCouncil(donor, sudoer);
+    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);
+    const proposalForClear = await helper.council.membership.clearPrimeCall();
+
+    await expect(proposalFromAllCommittee(proposalForSet)).to.be.rejectedWith('BadOrigin');
+    await expect(proposalFromAllCommittee(proposalForClear)).to.be.rejectedWith('BadOrigin');
+    await clearCouncil(sudoer);
+  });
+
+  itSub('[Negative] TechComm member cannot set/clear Council prime member', async ({helper}) => {
+    const counselors = await initCouncil(donor, sudoer);
+    const proposalForSet = await helper.council.membership.setPrimeCall(counselors.charu.address);
+    const proposalForClear = await helper.council.membership.clearPrimeCall();
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      proposalForSet,
+    )).to.be.rejectedWith('BadOrigin');
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      proposalForClear,
+    )).to.be.rejectedWith('BadOrigin');
+    await clearCouncil(sudoer);
+  });
+
+  itSub('[Negative] TechComm cannot add/remove a TechComm member', async ({helper}) => {
+    const newCommMember = helper.arrange.createEmptyAccount();
+    const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);
+    const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);
+
+    await expect(proposalFromAllCommittee(addMemberProposal)).to.be.rejectedWith('BadOrigin');
+    await expect(proposalFromAllCommittee(removeMemberProposal)).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot add/remove a TechComm member', async ({helper}) => {
+    const newCommMember = helper.arrange.createEmptyAccount();
+    const addMemberProposal = helper.council.membership.addMemberCall(newCommMember.address);
+    const removeMemberProposal = helper.council.membership.removeMemberCall(newCommMember.address);
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      addMemberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      removeMemberProposal,
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm cannot remove a Fellowship member', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+
+    await expect(proposalFromAllCommittee(helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5))).to.be.rejectedWith('BadOrigin');
+    await clearFellowship(sudoer);
+  });
+
+  itSub('[Negative] TechComm member cannot remove a Fellowship member', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.fellowship.collective.removeMemberCall(fellowship[5][0].address, 5),
+    )).to.be.rejectedWith('BadOrigin');
+    await clearFellowship(sudoer);
+  });
+
+  itSub('[Negative] TechComm member cannot fast-track Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.democracy.fastTrackCall(preimageHash, democracyFastTrackVotingPeriod, 0),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot cancel Democracy proposals', async ({helper}) => {
+    const proposeResult = await helper.getSudo().democracy.propose(sudoer, dummyProposalCall(helper), 0n);
+    const proposalIndex = Event.Democracy.Proposed.expect(proposeResult).proposalIndex;
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.democracy.cancelProposalCall(proposalIndex),
+    ))
+      .to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot cancel ongoing Democracy referendums', async ({helper}) => {
+    await helper.getSudo().democracy.externalProposeDefault(sudoer, dummyProposalCall(helper));
+    const startedEvent = await helper.wait.expectEvent(democracyLaunchPeriod, Event.Democracy.Started);
+    const referendumIndex = startedEvent.referendumIndex;
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.democracy.emergencyCancelCall(referendumIndex),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm cannot blacklist Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await expect(proposalFromAllCommittee(helper.democracy.blacklistCall(preimageHash))).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm member cannot blacklist Democracy proposals', async ({helper}) => {
+    const preimageHash = await helper.preimage.notePreimageFromCall(sudoer, dummyProposalCall(helper), true);
+    await helper.getSudo().democracy.externalProposeDefaultWithPreimage(sudoer, preimageHash);
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.democracy.blacklistCall(preimageHash),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub.skip('[Negative] TechComm member cannot veto external Democracy proposals until the cool-off period pass', async () => {
+
+  });
+
+  itSub('[Negative] TechComm member cannot cancel Fellowship referendums', async ({helper}) => {
+    const fellowship = await initFellowship(donor, sudoer);
+    const fellowshipProposer = fellowship[5][0];
+    const proposal = dummyProposal(helper);
+
+    const submitResult = await helper.fellowship.referenda.submit(
+      fellowshipProposer,
+      fellowshipPropositionOrigin,
+      proposal,
+      defaultEnactmentMoment,
+    );
+
+    const referendumIndex = Event.FellowshipReferenda.Submitted.expect(submitResult).referendumIndex;
+
+    await expect(helper.technicalCommittee.collective.execute(
+      techcomms.andy,
+      helper.fellowship.referenda.cancelCall(referendumIndex),
+    )).to.be.rejectedWith('BadOrigin');
+  });
+
+  itSub('[Negative] TechComm referendum cannot be closed until the voting threshold is met', async ({helper}) => {
+    const committeeSize = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON().length as any as number;
+    expect(committeeSize).is.greaterThan(1);
+    const proposeResult = await helper.technicalCommittee.collective.propose(
+      techcomms.andy,
+      dummyProposalCall(helper),
+      committeeSize,
+    );
+
+    const committeeProposedEvent = Event.TechnicalCommittee.Proposed.expect(proposeResult);
+    const proposalIndex = committeeProposedEvent.proposalIndex;
+    const proposalHash = committeeProposedEvent.proposalHash;
+
+    await helper.technicalCommittee.collective.vote(techcomms.constantine, proposalHash, proposalIndex, true);
+
+    await expect(helper.technicalCommittee.collective.close(techcomms.andy, proposalHash, proposalIndex)).to.be.rejectedWith('TooEarly');
+  });
+});
addedjs-packages/tests/sub/governance/util.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/governance/util.ts
@@ -0,0 +1,224 @@
+import type {IKeyringPair} from '@polkadot/types/types';
+import {xxhashAsHex} from '@polkadot/util-crypto';
+import type {u32} from '@polkadot/types-codec';
+import {usingPlaygrounds, expect} from '../../util/index.js';
+import {UniqueHelper} from '@unique/playgrounds/unique.js';
+import {DevUniqueHelper} from '@unique/playgrounds/unique.dev.js';
+
+export const democracyLaunchPeriod = 35;
+export const democracyVotingPeriod = 35;
+export const councilMotionDuration = 35;
+export const democracyEnactmentPeriod = 40;
+export const democracyFastTrackVotingPeriod = 5;
+
+export const fellowshipRankLimit = 7;
+export const fellowshipPropositionOrigin = 'FellowshipProposition';
+export const fellowshipPreparePeriod = 3;
+export const fellowshipConfirmPeriod = 3;
+export const fellowshipMinEnactPeriod = 1;
+
+export const defaultEnactmentMoment = {After: 0};
+
+export const democracyTrackId = 10;
+export const democracyTrackMinRank = 3;
+const twox128 = (data: any) => xxhashAsHex(data, 128);
+export interface ICounselors {
+  alex: IKeyringPair;
+  ildar: IKeyringPair;
+  charu: IKeyringPair;
+  filip: IKeyringPair;
+  irina: IKeyringPair;
+}
+export interface ITechComms {
+    greg: IKeyringPair;
+    andy: IKeyringPair;
+    constantine: IKeyringPair;
+}
+
+export async function initCouncil(donor: IKeyringPair, superuser: IKeyringPair) {
+  let counselors: IKeyringPair[] = [];
+
+  await usingPlaygrounds(async (helper) => {
+    const [alex, ildar, charu, filip, irina] = await helper.arrange.createAccounts([10_000n, 10_000n, 10_000n, 10_000n, 10_000n], donor);
+    const sudo = helper.getSudo();
+    {
+      const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON() as [];
+      if(members.length != 0) {
+        await clearCouncil(superuser);
+      }
+    }
+    const expectedMembers = [alex, ildar, charu, filip, irina];
+    for(const member of expectedMembers) {
+      await sudo.executeExtrinsic(superuser, 'api.tx.councilMembership.addMember', [member.address]);
+    }
+    await sudo.executeExtrinsic(superuser, 'api.tx.councilMembership.setPrime', [alex.address]);
+    {
+      const members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
+      expect(members).to.containSubset(expectedMembers.map((x: IKeyringPair) => x.address));
+      expect(members.length).to.be.equal(expectedMembers.length);
+    }
+
+    counselors = [alex, ildar, charu, filip, irina];
+  });
+  return {
+    alex: counselors[0],
+    ildar: counselors[1],
+    charu: counselors[2],
+    filip: counselors[3],
+    irina: counselors[4],
+  };
+}
+
+export async function clearCouncil(superuser: IKeyringPair) {
+  await usingPlaygrounds(async (helper) => {
+    let members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
+    if(members.length) {
+      const sudo = helper.getSudo();
+      for(const address of members) {
+        await sudo.executeExtrinsic(superuser, 'api.tx.councilMembership.removeMember', [address]);
+      }
+      members = (await helper.callRpc('api.query.councilMembership.members')).toJSON();
+    }
+    expect(members).to.be.deep.equal([]);
+  });
+}
+
+
+export async function initTechComm(donor: IKeyringPair, superuser: IKeyringPair) {
+  let techcomms: IKeyringPair[] = [];
+
+  await usingPlaygrounds(async (helper) => {
+    const [greg, andy, constantine] = await helper.arrange.createAccounts([10_000n, 10_000n, 10_000n], donor);
+    const sudo = helper.getSudo();
+    {
+      const members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON() as [];
+      if(members.length != 0) {
+        await clearTechComm(superuser);
+      }
+    }
+    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.addMember', [greg.address]);
+    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.addMember', [andy.address]);
+    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.addMember', [constantine.address]);
+    await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.setPrime', [greg.address]);
+    {
+      const members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
+      expect(members).to.containSubset([greg.address, andy.address, constantine.address]);
+      expect(members.length).to.be.equal(3);
+    }
+
+    techcomms = [greg, andy, constantine];
+  });
+
+  return {
+    greg: techcomms[0],
+    andy: techcomms[1],
+    constantine: techcomms[2],
+  };
+}
+
+export async function clearTechComm(superuser: IKeyringPair) {
+  await usingPlaygrounds(async (helper) => {
+    let members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
+    if(members.length) {
+      const sudo = helper.getSudo();
+      for(const address of members) {
+        await sudo.executeExtrinsic(superuser, 'api.tx.technicalCommitteeMembership.removeMember', [address]);
+      }
+      members = (await helper.callRpc('api.query.technicalCommitteeMembership.members')).toJSON();
+    }
+    expect(members).to.be.deep.equal([]);
+  });
+}
+
+export async function initFellowship(donor: IKeyringPair, sudoer: IKeyringPair) {
+  const numMembersInRank = 3;
+  const memberBalance = 5000n;
+  const members: IKeyringPair[][] = [];
+
+  await usingPlaygrounds(async (helper) => {
+    const currentFellows = await helper.getApi().query.fellowshipCollective.members.keys();
+
+    if(currentFellows.length != 0) {
+      await clearFellowship(sudoer);
+    }
+    for(let i = 0; i < fellowshipRankLimit; i++) {
+      const rankMembers = await helper.arrange.createAccounts(
+        Array(numMembersInRank).fill(memberBalance),
+        donor,
+      );
+
+      for(const member of rankMembers) {
+        await helper.getSudo().fellowship.collective.addMember(sudoer, member.address);
+
+        for(let rank = 0; rank < i; rank++) {
+          await helper.getSudo().fellowship.collective.promote(sudoer, member.address);
+        }
+      }
+
+      members.push(rankMembers);
+    }
+  });
+
+  return members;
+}
+
+export async function clearFellowship(sudoer: IKeyringPair) {
+  await usingPlaygrounds(async (helper) => {
+    const fellowship = (await helper.getApi().query.fellowshipCollective.members.keys())
+      .map((key) => key.args[0].toString());
+    for(const  member of fellowship) {
+      await helper.getSudo().fellowship.collective.removeMember(sudoer, member, fellowshipRankLimit);
+    }
+  });
+}
+
+export async function clearFellowshipReferenda(sudoer: IKeyringPair) {
+  await usingPlaygrounds(async (helper) => {
+    const proposalsCount = (await helper.getApi().query.fellowshipReferenda.referendumCount()) as u32;
+    for(let i = 0; i < proposalsCount.toNumber(); i++) {
+      await helper.getSudo().fellowship.referenda.cancel(sudoer, i);
+    }
+  });
+}
+
+export async function hardResetFellowshipReferenda(sudoer: IKeyringPair) {
+  await usingPlaygrounds(async (helper) => {
+    const api = helper.getApi();
+    const prefix = twox128('FellowshipReferenda');
+    await helper.signTransaction(sudoer, api.tx.sudo.sudo(api.tx.system.killPrefix(prefix, 100)));
+  });
+}
+
+export async function hardResetDemocracy(sudoer: IKeyringPair) {
+  await usingPlaygrounds(async (helper) => {
+    const api = helper.getApi();
+    const prefix = twox128('Democracy');
+    await helper.signTransaction(sudoer, api.tx.sudo.sudo(api.tx.system.killPrefix(prefix, 100)));
+  });
+}
+
+export async function hardResetGovScheduler(sudoer: IKeyringPair) {
+  await usingPlaygrounds(async (helper) => {
+    const api = helper.getApi();
+    const prefix = twox128('GovScheduler');
+    await helper.signTransaction(sudoer, api.tx.sudo.sudo(api.tx.system.killPrefix(prefix, 500)));
+  });
+}
+
+export async function voteUnanimouslyInFellowship(helper: DevUniqueHelper, fellows: IKeyringPair[][], minRank: number, referendumIndex: number) {
+  for(let rank = minRank; rank < fellowshipRankLimit; rank++) {
+    for(const member of fellows[rank]) {
+      await helper.fellowship.collective.vote(member, referendumIndex, true);
+    }
+  }
+}
+
+export function dummyProposalCall(helper: UniqueHelper) {
+  return helper.constructApiCall('api.tx.system.remark', ['dummy proposal' + (new Date()).getTime()]);
+}
+
+export function dummyProposal(helper: UniqueHelper) {
+  return {
+    Inline: dummyProposalCall(helper).method.toHex(),
+  };
+}
addedjs-packages/tests/sub/nesting/collectionProperties.seqtest.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/nesting/collectionProperties.seqtest.ts
@@ -0,0 +1,61 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../../util/index.js';
+
+describe('Integration Test: Collection Properties with sudo', () => {
+  let superuser: IKeyringPair;
+  let alice: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      superuser = await privateKey('//Alice');
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([100n], donor);
+    });
+  });
+
+  [
+    {mode: 'nft' as const, requiredPallets: []},
+    {mode: 'ft' as const, requiredPallets: []},
+    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
+  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
+    before(async function() {
+      // eslint-disable-next-line require-await
+      await usingPlaygrounds(async helper => {
+        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
+      });
+    });
+
+    itSub('Repairing an unbroken collection\'s properties preserves the consumed space', async({helper}) => {
+      const properties = [
+        {key: 'sea-creatures', value: 'mermaids'},
+        {key: 'goldenratio', value: '1.6180339887498948482045868343656381177203091798057628621354486227052604628189'},
+      ];
+      const collection = await helper[testSuite.mode].mintCollection(alice, {properties});
+
+      const newProperty = {key: 'space', value: ' '.repeat(4096)};
+      await collection.setProperties(alice, [newProperty]);
+      const originalSpace = await collection.getPropertiesConsumedSpace();
+      expect(originalSpace).to.be.equal(sizeOfProperty(properties[0]) + sizeOfProperty(properties[1]) + sizeOfProperty(newProperty));
+
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairCollection', [collection.collectionId], true);
+      const recomputedSpace = await collection.getPropertiesConsumedSpace();
+      expect(recomputedSpace).to.be.equal(originalSpace);
+    });
+  }));
+});
addedjs-packages/tests/sub/nesting/collectionProperties.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/nesting/collectionProperties.test.ts
@@ -0,0 +1,326 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../../util/index.js';
+
+describe('Integration Test: Collection Properties', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob] = await helper.arrange.createAccounts([200n, 10n], donor);
+    });
+  });
+
+  itSub('Properties are initially empty', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice);
+    expect(await collection.getProperties()).to.be.empty;
+  });
+
+  [
+    {mode: 'nft' as const, requiredPallets: []},
+    {mode: 'ft' as const, requiredPallets: []},
+    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
+  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
+    before(async function() {
+      // eslint-disable-next-line require-await
+      await usingPlaygrounds(async helper => {
+        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
+      });
+    });
+
+    itSub('Sets properties for a collection', async ({helper}) =>  {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      // As owner
+      await expect(collection.setProperties(alice, [{key: 'electron', value: 'come bond'}])).to.be.fulfilled;
+
+      await collection.addAdmin(alice, {Substrate: bob.address});
+
+      // As administrator
+      await expect(collection.setProperties(bob, [{key: 'black_hole'}])).to.be.fulfilled;
+
+      const properties = await collection.getProperties();
+      expect(properties).to.include.deep.members([
+        {key: 'electron', value: 'come bond'},
+        {key: 'black_hole', value: ''},
+      ]);
+    });
+
+    itSub('Check valid names for collection properties keys', async ({helper}) =>  {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      // alpha symbols
+      await expect(collection.setProperties(alice, [{key: 'answer'}])).to.be.fulfilled;
+
+      // numeric symbols
+      await expect(collection.setProperties(alice, [{key: '451'}])).to.be.fulfilled;
+
+      // underscore symbol
+      await expect(collection.setProperties(alice, [{key: 'black_hole'}])).to.be.fulfilled;
+
+      // dash symbol
+      await expect(collection.setProperties(alice, [{key: '-'}])).to.be.fulfilled;
+
+      // dot symbol
+      await expect(collection.setProperties(alice, [{key: 'once.in.a.long.long.while...', value: 'you get a little lost'}])).to.be.fulfilled;
+
+      const properties = await collection.getProperties();
+      expect(properties).to.include.deep.members([
+        {key: 'answer', value: ''},
+        {key: '451', value: ''},
+        {key: 'black_hole', value: ''},
+        {key: '-', value: ''},
+        {key: 'once.in.a.long.long.while...', value: 'you get a little lost'},
+      ]);
+    });
+
+    itSub('Changes properties of a collection', async ({helper}) =>  {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      await expect(collection.setProperties(alice, [{key: 'electron', value: 'come bond'}, {key: 'black_hole', value: ''}])).to.be.fulfilled;
+
+      // Mutate the properties
+      await expect(collection.setProperties(alice, [{key: 'black_hole', value: 'LIGO'}])).to.be.fulfilled;
+
+      const properties = await collection.getProperties();
+      expect(properties).to.include.deep.members([
+        {key: 'electron', value: 'come bond'},
+        {key: 'black_hole', value: 'LIGO'},
+      ]);
+    });
+
+    itSub('Deletes properties of a collection', async ({helper}) =>  {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      await expect(collection.setProperties(alice, [{key: 'electron', value: 'come bond'}, {key: 'black_hole', value: 'LIGO'}])).to.be.fulfilled;
+
+      await expect(collection.deleteProperties(alice, ['electron'])).to.be.fulfilled;
+
+      const properties = await collection.getProperties(['black_hole', 'electron']);
+      expect(properties).to.be.deep.equal([
+        {key: 'black_hole', value: 'LIGO'},
+      ]);
+    });
+
+    itSub('Allows modifying a collection property multiple times with the same size', async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      const maxCollectionPropertiesSize = 40960;
+
+      const propDataSize = 4096;
+
+      let propDataChar = 'a';
+      const makeNewPropData = () => {
+        propDataChar = String.fromCharCode(propDataChar.charCodeAt(0) + 1);
+        return `${propDataChar}`.repeat(propDataSize);
+      };
+
+      const property = {key: propKey, value: makeNewPropData()};
+      await collection.setProperties(alice, [property]);
+      const originalSpace = await collection.getPropertiesConsumedSpace();
+      expect(originalSpace).to.be.equal(sizeOfProperty(property));
+
+      const sameSizePropertiesPossibleNum = maxCollectionPropertiesSize / propDataSize;
+
+      // It is possible to modify a property as many times as needed.
+      // It will not consume any additional space.
+      for(let i = 0; i < sameSizePropertiesPossibleNum + 1; i++) {
+        await collection.setProperties(alice, [{key: propKey, value: makeNewPropData()}]);
+        const consumedSpace = await collection.getPropertiesConsumedSpace();
+        expect(consumedSpace).to.be.equal(originalSpace);
+      }
+    });
+
+    itSub('Adding then removing a collection property doesn\'t change the consumed space', async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+      const originalSpace = await collection.getPropertiesConsumedSpace();
+
+      const propDataSize = 4096;
+      const propData = 'a'.repeat(propDataSize);
+
+      const property = {key: propKey, value: propData};
+      await collection.setProperties(alice, [property]);
+      let consumedSpace = await collection.getPropertiesConsumedSpace();
+      expect(consumedSpace).to.be.equal(sizeOfProperty(property));
+
+      await collection.deleteProperties(alice, [propKey]);
+      consumedSpace = await collection.getPropertiesConsumedSpace();
+      expect(consumedSpace).to.be.equal(originalSpace);
+    });
+
+    itSub('Modifying a collection property with different sizes correctly changes the consumed space', async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+      const originalSpace = await collection.getPropertiesConsumedSpace();
+
+      const initProp = {key: propKey, value: 'a'.repeat(4096)};
+      const biggerProp = {key: propKey, value: 'b'.repeat(5000)};
+      const smallerProp = {key: propKey, value: 'c'.repeat(4000)};
+
+      let consumedSpace;
+      let expectedConsumedSpaceDiff;
+
+      await collection.setProperties(alice, [initProp]);
+      consumedSpace = await collection.getPropertiesConsumedSpace();
+      expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace;
+      expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);
+
+      await collection.setProperties(alice, [biggerProp]);
+      consumedSpace = await collection.getPropertiesConsumedSpace();
+      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp);
+      expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff);
+
+      await collection.setProperties(alice, [smallerProp]);
+      consumedSpace = await collection.getPropertiesConsumedSpace();
+      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp);
+      expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff);
+    });
+  }));
+});
+
+describe('Negative Integration Test: Collection Properties', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob] = await helper.arrange.createAccounts([1000n, 100n], donor);
+    });
+  });
+
+  [
+    {mode: 'nft' as const, requiredPallets: []},
+    {mode: 'ft' as const, requiredPallets: []},
+    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
+  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
+    before(async function() {
+      // eslint-disable-next-line require-await
+      await usingPlaygrounds(async helper => {
+        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
+      });
+    });
+
+    itSub('Fails to set properties in a collection if not its onwer/administrator', async ({helper}) =>  {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      await expect(collection.setProperties(bob, [{key: 'electron', value: 'come bond'}, {key: 'black_hole', value: 'LIGO'}]))
+        .to.be.rejectedWith(/common\.NoPermission/);
+
+      expect(await collection.getProperties()).to.be.empty;
+    });
+
+    itSub('Fails to set properties that exceed the limits', async ({helper}) =>  {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      const spaceLimit = (helper.getApi().consts.unique.maxCollectionPropertiesSize as any).toNumber();
+
+      // Mute the general tx parsing error, too many bytes to process
+      {
+        console.error = () => {};
+        await expect(collection.setProperties(alice, [
+          {key: 'electron', value: 'low high '.repeat(Math.ceil(spaceLimit! / 9))},
+        ])).to.be.rejected;
+      }
+
+      expect(await collection.getProperties(['electron'])).to.be.empty;
+
+      await expect(collection.setProperties(alice, [
+        {key: 'electron', value: 'low high '.repeat(Math.ceil(spaceLimit! / 18))},
+        {key: 'black_hole', value: '0'.repeat(Math.ceil(spaceLimit! / 2))},
+      ])).to.be.rejectedWith(/common\.NoSpaceForProperty/);
+
+      expect(await collection.getProperties(['electron', 'black_hole'])).to.be.empty;
+    });
+
+    itSub('Fails to set more properties than it is allowed', async ({helper}) =>  {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      const propertiesToBeSet = [];
+      for(let i = 0; i < 65; i++) {
+        propertiesToBeSet.push({
+          key: 'electron_' + i,
+          value: Math.random() > 0.5 ? 'high' : 'low',
+        });
+      }
+
+      await expect(collection.setProperties(alice, propertiesToBeSet)).
+        to.be.rejectedWith(/common\.PropertyLimitReached/);
+
+      expect(await collection.getProperties()).to.be.empty;
+    });
+
+    itSub('Fails to set properties with invalid names', async ({helper}) => {
+      const collection = await helper[testSuite.mode].mintCollection(alice);
+
+      const invalidProperties = [
+        [{key: 'electron', value: 'negative'}, {key: 'string theory', value: 'understandable'}],
+        [{key: 'Mr/Sandman', value: 'Bring me a gene'}],
+        [{key: 'déjà vu', value: 'hmm...'}],
+      ];
+
+      for(let i = 0; i < invalidProperties.length; i++) {
+        await expect(
+          collection.setProperties(alice, invalidProperties[i]),
+          `on rejecting the new badly-named property #${i}`,
+        ).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
+      }
+
+      await expect(
+        collection.setProperties(alice, [{key: '', value: 'nothing must not exist'}]),
+        'on rejecting an unnamed property',
+      ).to.be.rejectedWith(/common\.EmptyPropertyKey/);
+
+      await expect(
+        collection.setProperties(alice, [{key: 'CRISPR-Cas9', value: 'rewriting nature!'}]),
+        'on setting the correctly-but-still-badly-named property',
+      ).to.be.fulfilled;
+
+      const keys = invalidProperties.flatMap(propertySet => propertySet.map(property => property.key)).concat('CRISPR-Cas9').concat('');
+
+      const properties = await collection.getProperties(keys);
+      expect(properties).to.be.deep.equal([
+        {key: 'CRISPR-Cas9', value: 'rewriting nature!'},
+      ]);
+
+      for(let i = 0; i < invalidProperties.length; i++) {
+        await expect(
+          collection.deleteProperties(alice, invalidProperties[i].map(propertySet => propertySet.key)),
+          `on trying to delete the non-existent badly-named property #${i}`,
+        ).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
+      }
+    });
+
+    itSub('Forbids to repair a collection if called with non-sudo', async({helper}) => {
+      const collection = await helper[testSuite.mode].mintCollection(alice, {properties: [
+        {key: 'sea-creatures', value: 'mermaids'},
+        {key: 'goldenratio', value: '1.6180339887498948482045868343656381177203091798057628621354486227052604628189'},
+      ]});
+
+      await expect(helper.executeExtrinsic(alice, 'api.tx.unique.forceRepairCollection', [collection.collectionId], true))
+        .to.be.rejectedWith(/BadOrigin/);
+    });
+  }));
+});
addedjs-packages/tests/sub/nesting/graphs.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/nesting/graphs.test.ts
@@ -0,0 +1,86 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, usingPlaygrounds} from '../../util/index.js';
+import {UniqueHelper, UniqueNFTCollection, UniqueNFToken} from '@unique/playgrounds/unique.js';
+
+/**
+ * ```dot
+ * 4 -> 3 -> 2 -> 1
+ * 7 -> 6 -> 5 -> 2
+ * 8 -> 5
+ * ```
+ */
+async function buildComplexObjectGraph(helper: UniqueHelper, sender: IKeyringPair): Promise<[UniqueNFTCollection,UniqueNFToken[]]> {
+  const collection = await helper.nft.mintCollection(sender, {permissions: {nesting: {tokenOwner: true}}});
+  const tokens = await collection.mintMultipleTokens(sender, Array(8).fill({owner: {Substrate: sender.address}}));
+
+  await tokens[7].nest(sender, tokens[4]);
+  await tokens[6].nest(sender, tokens[5]);
+  await tokens[5].nest(sender, tokens[4]);
+  await tokens[4].nest(sender, tokens[1]);
+  await tokens[3].nest(sender, tokens[2]);
+  await tokens[2].nest(sender, tokens[1]);
+  await tokens[1].nest(sender, tokens[0]);
+
+  return [collection, tokens];
+}
+
+describe('Graphs', () => {
+  let alice: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([10n], donor);
+    });
+  });
+
+  itSub('Ouroboros can\'t be created in a complex graph', async ({helper}) => {
+    const [collection, tokens] = await buildComplexObjectGraph(helper, alice);
+
+    await collection.setPermissions(alice, {nesting: {collectionAdmin: false, tokenOwner: true}});
+
+    // [token owner] to self
+    await expect(
+      tokens[0].nest(alice, tokens[0]),
+      '[token owner] self-nesting is forbidden',
+    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
+    // [token owner] to nested part of graph
+    await expect(
+      tokens[0].nest(alice, tokens[4]),
+      '[token owner] cannot nest the root node into an internal node',
+    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
+    await expect(
+      tokens[1].transferFrom(alice, tokens[0].nestingAccount(), tokens[7].nestingAccount()),
+      '[token owner] cannot nest higher internal node into lower internal node',
+    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
+
+    await collection.setPermissions(alice, {nesting: {collectionAdmin: true, tokenOwner: false}});
+
+    // [collection owner] to self
+    await expect(
+      tokens[0].nest(alice, tokens[0]),
+      '[collection owner] self-nesting is forbidden',
+    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
+    // [collection owner] to nested part of graph
+    await expect(
+      tokens[0].nest(alice, tokens[4]),
+      '[collection owner] cannot nest the root node into an internal node',
+    ).to.be.rejectedWith(/structure\.OuroborosDetected/);
+  });
+});
addedjs-packages/tests/sub/nesting/propertyPermissions.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/nesting/propertyPermissions.test.ts
@@ -0,0 +1,198 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect} from '../../util/index.js';
+import {UniqueNFTCollection, UniqueRFTCollection} from '@unique/playgrounds/unique.js';
+
+describe('Integration Test: Access Rights to Token Properties', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob] = await helper.arrange.createAccounts([100n, 10n], donor);
+    });
+  });
+
+  itSub('Reads access rights to properties of a collection', async ({helper}) =>  {
+    const collection = await helper.nft.mintCollection(alice);
+    const propertyRights = (await helper.callRpc('api.query.common.collectionPropertyPermissions', [collection.collectionId])).toJSON();
+    expect(propertyRights).to.be.empty;
+  });
+
+  async function testSetsAccessRightsToProperties(collection: UniqueNFTCollection | UniqueRFTCollection) {
+    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: true}}]))
+      .to.be.fulfilled;
+
+    await collection.addAdmin(alice, {Substrate: bob.address});
+
+    await expect(collection.setTokenPropertyPermissions(bob, [{key: 'mindgame', permission: {collectionAdmin: true, tokenOwner: false}}]))
+      .to.be.fulfilled;
+
+    const propertyRights = await collection.getPropertyPermissions(['skullduggery', 'mindgame']);
+    expect(propertyRights).to.include.deep.members([
+      {key: 'skullduggery', permission: {mutable: true, collectionAdmin: false, tokenOwner: false}},
+      {key: 'mindgame', permission: {mutable: false, collectionAdmin: true, tokenOwner: false}},
+    ]);
+  }
+
+  itSub('Sets access rights to properties of a collection (NFT)', async ({helper}) =>  {
+    await testSetsAccessRightsToProperties(await helper.nft.mintCollection(alice));
+  });
+
+  itSub.ifWithPallets('Sets access rights to properties of a collection (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    await testSetsAccessRightsToProperties(await helper.rft.mintCollection(alice));
+  });
+
+  async function testChangesAccessRightsToProperty(collection: UniqueNFTCollection | UniqueRFTCollection) {
+    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: true, collectionAdmin: true}}]))
+      .to.be.fulfilled;
+
+    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]))
+      .to.be.fulfilled;
+
+    const propertyRights = await collection.getPropertyPermissions();
+    expect(propertyRights).to.be.deep.equal([
+      {key: 'skullduggery', permission: {'mutable': false, 'collectionAdmin': false, 'tokenOwner': true}},
+    ]);
+  }
+
+  itSub('Changes access rights to properties of a NFT collection', async ({helper}) =>  {
+    await testChangesAccessRightsToProperty(await helper.nft.mintCollection(alice));
+  });
+
+  itSub.ifWithPallets('Changes access rights to properties of a ReFungible collection', [Pallets.ReFungible], async ({helper}) => {
+    await testChangesAccessRightsToProperty(await helper.rft.mintCollection(alice));
+  });
+});
+
+describe('Negative Integration Test: Access Rights to Token Properties', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
+    });
+  });
+
+  async function testPreventsFromSettingAccessRightsNotAdminOrOwner(collection: UniqueNFTCollection | UniqueRFTCollection) {
+    await expect(collection.setTokenPropertyPermissions(bob, [{key: 'skullduggery', permission: {mutable: true, tokenOwner: true}}]))
+      .to.be.rejectedWith(/common\.NoPermission/);
+
+    const propertyRights = await collection.getPropertyPermissions(['skullduggery']);
+    expect(propertyRights).to.be.empty;
+  }
+
+  itSub('Prevents from setting access rights to properties of a NFT collection if not an onwer/admin', async ({helper}) =>  {
+    await testPreventsFromSettingAccessRightsNotAdminOrOwner(await helper.nft.mintCollection(alice));
+  });
+
+  itSub.ifWithPallets('Prevents from setting access rights to properties of a ReFungible collection if not an onwer/admin', [Pallets.ReFungible], async ({helper}) => {
+    await testPreventsFromSettingAccessRightsNotAdminOrOwner(await helper.rft.mintCollection(alice));
+  });
+
+  async function testPreventFromAddingTooManyPossibleProperties(collection: UniqueNFTCollection | UniqueRFTCollection) {
+    const constitution = [];
+    for(let i = 0; i < 65; i++) {
+      constitution.push({
+        key: 'property_' + i,
+        permission: Math.random() > 0.5 ? {mutable: true, collectionAdmin: true, tokenOwner: true} : {},
+      });
+    }
+
+    await expect(collection.setTokenPropertyPermissions(alice, constitution))
+      .to.be.rejectedWith(/common\.PropertyLimitReached/);
+
+    const propertyRights = await collection.getPropertyPermissions();
+    expect(propertyRights).to.be.empty;
+  }
+
+  itSub('Prevents from adding too many possible properties (NFT)', async ({helper}) =>  {
+    await testPreventFromAddingTooManyPossibleProperties(await helper.nft.mintCollection(alice));
+  });
+
+  itSub.ifWithPallets('Prevents from adding too many possible properties (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    await testPreventFromAddingTooManyPossibleProperties(await helper.rft.mintCollection(alice));
+  });
+
+  async function testPreventAccessRightsModifiedIfConstant(collection: UniqueNFTCollection | UniqueRFTCollection) {
+    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {mutable: false, tokenOwner: true}}]))
+      .to.be.fulfilled;
+
+    await expect(collection.setTokenPropertyPermissions(alice, [{key: 'skullduggery', permission: {collectionAdmin: true}}]))
+      .to.be.rejectedWith(/common\.NoPermission/);
+
+    const propertyRights = await collection.getPropertyPermissions(['skullduggery']);
+    expect(propertyRights).to.deep.equal([
+      {key: 'skullduggery', permission: {'mutable': false, 'collectionAdmin': false, 'tokenOwner': true}},
+    ]);
+  }
+
+  itSub('Prevents access rights to be modified if constant (NFT)', async ({helper}) =>  {
+    await testPreventAccessRightsModifiedIfConstant(await helper.nft.mintCollection(alice));
+  });
+
+  itSub.ifWithPallets('Prevents access rights to be modified if constant (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    await testPreventAccessRightsModifiedIfConstant(await helper.rft.mintCollection(alice));
+  });
+
+  async function testPreventsAddingPropertiesWithInvalidNames(collection: UniqueNFTCollection | UniqueRFTCollection) {
+    const invalidProperties = [
+      [{key: 'skullduggery', permission: {tokenOwner: true}}, {key: 'im possible', permission: {collectionAdmin: true}}],
+      [{key: 'G#4', permission: {tokenOwner: true}}],
+      [{key: 'HÆMILTON', permission: {mutable: false, collectionAdmin: true, tokenOwner: true}}],
+    ];
+
+    for(let i = 0; i < invalidProperties.length; i++) {
+      await expect(
+        collection.setTokenPropertyPermissions(alice, invalidProperties[i]),
+        `on setting the new badly-named property #${i}`,
+      ).to.be.rejectedWith(/common\.InvalidCharacterInPropertyKey/);
+    }
+
+    await expect(
+      collection.setTokenPropertyPermissions(alice, [{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(
+      collection.setTokenPropertyPermissions(alice, [
+        {key: correctKey, permission: {collectionAdmin: true}},
+      ]),
+      'on setting the correctly-but-still-badly-named property',
+    ).to.be.fulfilled;
+
+    const keys = invalidProperties.flatMap(propertySet => propertySet.map(property => property.key)).concat(correctKey).concat('');
+
+    const propertyRights = await collection.getPropertyPermissions(keys);
+    expect(propertyRights).to.be.deep.equal([
+      {key: correctKey, permission: {mutable: false, collectionAdmin: true, tokenOwner: false}},
+    ]);
+  }
+
+  itSub('Prevents adding properties with invalid names (NFT)', async ({helper}) =>  {
+    await testPreventsAddingPropertiesWithInvalidNames(await helper.nft.mintCollection(alice));
+  });
+
+  itSub.ifWithPallets('Prevents adding properties with invalid names (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    await testPreventsAddingPropertiesWithInvalidNames(await helper.rft.mintCollection(alice));
+  });
+});
addedjs-packages/tests/sub/nesting/tokenProperties.seqtest.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/nesting/tokenProperties.seqtest.ts
@@ -0,0 +1,71 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, usingPlaygrounds, expect, requirePalletsOrSkip, sizeOfProperty} from '../../util/index.js';
+
+describe('Integration Test: Token Properties with sudo', () => {
+  let superuser: IKeyringPair;
+  let alice: IKeyringPair; // collection owner
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      superuser = await privateKey('//Alice');
+      const donor = await privateKey({url: import.meta.url});
+      [alice] = await helper.arrange.createAccounts([100n], donor);
+    });
+  });
+
+  [
+    {mode: 'nft' as const, pieces: undefined, requiredPallets: []} as const,
+    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]} as const,
+  ].map(testSuite => describe(`${testSuite.mode.toUpperCase()}`, () => {
+    before(async function() {
+      // eslint-disable-next-line require-await
+      await usingPlaygrounds(async helper => {
+        requirePalletsOrSkip(this, helper, testSuite.requiredPallets);
+      });
+    });
+
+    itSub('force_repair_item preserves valid consumed space', async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testSuite.mode].mintCollection(alice, {
+        tokenPropertyPermissions: [
+          {
+            key: propKey,
+            permission: {mutable: true, tokenOwner: true},
+          },
+        ],
+      });
+      const token = await (
+        testSuite.pieces
+          ? collection.mintToken(alice, testSuite.pieces as any)
+          : collection.mintToken(alice)
+      );
+
+      const prop = {key: propKey, value: 'a'.repeat(4096)};
+
+      await token.setProperties(alice, [prop]);
+      const originalSpace = await token.getTokenPropertiesConsumedSpace();
+      expect(originalSpace).to.be.equal(sizeOfProperty(prop));
+
+      await helper.getSudo().executeExtrinsic(superuser, 'api.tx.unique.forceRepairItem', [token.collectionId, token.tokenId], true);
+      const recomputedSpace = await token.getTokenPropertiesConsumedSpace();
+      expect(recomputedSpace).to.be.equal(originalSpace);
+    });
+  }));
+});
addedjs-packages/tests/sub/nesting/tokenProperties.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/nesting/tokenProperties.test.ts
@@ -0,0 +1,816 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {itSub, Pallets, requirePalletsOrSkip, usingPlaygrounds, expect, sizeOfProperty} from '../../util/index.js';
+import {UniqueHelper, UniqueNFToken, UniqueRFToken} from '@unique/playgrounds/unique.js';
+
+describe('Integration Test: Token Properties', () => {
+  let alice: IKeyringPair; // collection owner
+  let bob: IKeyringPair; // collection admin
+  let charlie: IKeyringPair; // token owner
+
+  let permissions: {permission: any, signers: IKeyringPair[]}[];
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob, charlie] = await helper.arrange.createAccounts([200n, 100n, 100n], donor);
+    });
+
+    permissions = [
+      {permission: {mutable: true, collectionAdmin: true}, signers: [alice, bob]},
+      {permission: {mutable: false, collectionAdmin: true}, signers: [alice, bob]},
+      {permission: {mutable: true, tokenOwner: true}, signers: [charlie]},
+      {permission: {mutable: false, tokenOwner: true}, signers: [charlie]},
+      {permission: {mutable: true, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie]},
+      {permission: {mutable: false, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie]},
+    ];
+  });
+
+  async function mintCollectionWithAllPermissionsAndToken(helper: UniqueHelper, mode: 'NFT' | 'RFT'): Promise<[UniqueNFToken | UniqueRFToken, bigint]> {
+    const collection = await (mode == 'NFT' ? helper.nft : helper.rft).mintCollection(alice, {
+      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
+        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
+    });
+    return mode == 'NFT' ? [await collection.mintToken(alice), 1n] : [await collection.mintToken(alice, 100n as any), 100n];
+  }
+
+  async function testReadsYetEmptyProperties(token: UniqueNFToken | UniqueRFToken) {
+    const properties = await token.getProperties();
+    expect(properties).to.be.empty;
+
+    const tokenData = await token.getData();
+    expect(tokenData!.properties).to.be.empty;
+  }
+
+  itSub('Reads yet empty properties of a token (NFT)', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice);
+    const token = await collection.mintToken(alice);
+    await testReadsYetEmptyProperties(token);
+  });
+
+  itSub.ifWithPallets('Reads yet empty properties of a token (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const collection = await helper.rft.mintCollection(alice);
+    const token = await collection.mintToken(alice);
+    await testReadsYetEmptyProperties(token);
+  });
+
+  async function testAssignPropertiesAccordingToPermissions(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
+    await token.collection.addAdmin(alice, {Substrate: bob.address});
+    await token.transfer(alice, {Substrate: charlie.address}, pieces);
+
+    const propertyKeys: string[] = [];
+    let i = 0;
+    for(const permission of permissions) {
+      i++;
+      let j = 0;
+      for(const signer of permission.signers) {
+        j++;
+        const key = i + '_' + signer.address;
+        propertyKeys.push(key);
+
+        await expect(
+          token.setProperties(signer, [{key: key, value: 'Serotonin increase'}]),
+          `on adding property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+      }
+    }
+
+    const properties = await token.getProperties(propertyKeys);
+    const tokenData = await token.getData();
+    for(let i = 0; i < properties.length; i++) {
+      expect(properties[i].value).to.be.equal('Serotonin increase');
+      expect(tokenData!.properties[i].value).to.be.equal('Serotonin increase');
+    }
+  }
+
+  itSub('Assigns properties to a token according to permissions (NFT)', async ({helper}) =>  {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
+    await testAssignPropertiesAccordingToPermissions(token, amount);
+  });
+
+  itSub.ifWithPallets('Assigns properties to a token according to permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
+    await testAssignPropertiesAccordingToPermissions(token, amount);
+  });
+
+  async function testChangesPropertiesAccordingPermission(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
+    await token.collection.addAdmin(alice, {Substrate: bob.address});
+    await token.transfer(alice, {Substrate: charlie.address}, pieces);
+
+    const propertyKeys: string[] = [];
+    let i = 0;
+    for(const permission of permissions) {
+      i++;
+      if(!permission.permission.mutable) continue;
+
+      let j = 0;
+      for(const signer of permission.signers) {
+        j++;
+        const key = i + '_' + signer.address;
+        propertyKeys.push(key);
+
+        await expect(
+          token.setProperties(signer, [{key, value: 'Serotonin increase'}]),
+          `on adding property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+
+        await expect(
+          token.setProperties(signer, [{key, value: 'Serotonin stable'}]),
+          `on changing property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+      }
+    }
+
+    const properties = await token.getProperties(propertyKeys);
+    const tokenData = await token.getData();
+    for(let i = 0; i < properties.length; i++) {
+      expect(properties[i].value).to.be.equal('Serotonin stable');
+      expect(tokenData!.properties[i].value).to.be.equal('Serotonin stable');
+    }
+  }
+
+  itSub('Changes properties of a token according to permissions (NFT)', async ({helper}) =>  {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
+    await testChangesPropertiesAccordingPermission(token, amount);
+  });
+
+  itSub.ifWithPallets('Changes properties of a token according to permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
+    await testChangesPropertiesAccordingPermission(token, amount);
+  });
+
+  async function testDeletePropertiesAccordingPermission(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
+    await token.collection.addAdmin(alice, {Substrate: bob.address});
+    await token.transfer(alice, {Substrate: charlie.address}, pieces);
+
+    const propertyKeys: string[] = [];
+    let i = 0;
+
+    for(const permission of permissions) {
+      i++;
+      if(!permission.permission.mutable) continue;
+
+      let j = 0;
+      for(const signer of permission.signers) {
+        j++;
+        const key = i + '_' + signer.address;
+        propertyKeys.push(key);
+
+        await expect(
+          token.setProperties(signer, [{key, value: 'Serotonin increase'}]),
+          `on adding property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+
+        await expect(
+          token.deleteProperties(signer, [key]),
+          `on deleting property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+      }
+    }
+
+    expect(await token.getProperties(propertyKeys)).to.be.empty;
+    expect((await token.getData())!.properties).to.be.empty;
+  }
+
+  itSub('Deletes properties of a token according to permissions (NFT)', async ({helper}) =>  {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
+    await testDeletePropertiesAccordingPermission(token, amount);
+  });
+
+  itSub.ifWithPallets('Deletes properties of a token according to permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
+    await testDeletePropertiesAccordingPermission(token, amount);
+  });
+
+  itSub('Assigns properties to a nested token according to permissions', async ({helper}) =>  {
+    const collectionA = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const collectionB = await helper.nft.mintCollection(alice, {
+      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
+        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
+    });
+    const targetToken = await collectionA.mintToken(alice);
+    const nestedToken = await collectionB.mintToken(alice, targetToken.nestingAccount());
+
+    await collectionB.addAdmin(alice, {Substrate: bob.address});
+    await targetToken.transfer(alice, {Substrate: charlie.address});
+
+    const propertyKeys: string[] = [];
+    let i = 0;
+    for(const permission of permissions) {
+      i++;
+      let j = 0;
+      for(const signer of permission.signers) {
+        j++;
+        const key = i + '_' + signer.address;
+        propertyKeys.push(key);
+
+        await expect(
+          nestedToken.setProperties(signer, [{key, value: 'Serotonin increase'}]),
+          `on adding property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+      }
+    }
+
+    const properties = await nestedToken.getProperties(propertyKeys);
+    const tokenData = await nestedToken.getData();
+    for(let i = 0; i < properties.length; i++) {
+      expect(properties[i].value).to.be.equal('Serotonin increase');
+      expect(tokenData!.properties[i].value).to.be.equal('Serotonin increase');
+    }
+    expect(await targetToken.getProperties()).to.be.empty;
+  });
+
+  itSub('Changes properties of a nested token according to permissions', async ({helper}) =>  {
+    const collectionA = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const collectionB = await helper.nft.mintCollection(alice, {
+      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
+        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
+    });
+    const targetToken = await collectionA.mintToken(alice);
+    const nestedToken = await collectionB.mintToken(alice, targetToken.nestingAccount());
+
+    await collectionB.addAdmin(alice, {Substrate: bob.address});
+    await targetToken.transfer(alice, {Substrate: charlie.address});
+
+    const propertyKeys: string[] = [];
+    let i = 0;
+    for(const permission of permissions) {
+      i++;
+      if(!permission.permission.mutable) continue;
+
+      let j = 0;
+      for(const signer of permission.signers) {
+        j++;
+        const key = i + '_' + signer.address;
+        propertyKeys.push(key);
+
+        await expect(
+          nestedToken.setProperties(signer, [{key, value: 'Serotonin increase'}]),
+          `on adding property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+
+        await expect(
+          nestedToken.setProperties(signer, [{key, value: 'Serotonin stable'}]),
+          `on changing property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+      }
+    }
+
+    const properties = await nestedToken.getProperties(propertyKeys);
+    const tokenData = await nestedToken.getData();
+    for(let i = 0; i < properties.length; i++) {
+      expect(properties[i].value).to.be.equal('Serotonin stable');
+      expect(tokenData!.properties[i].value).to.be.equal('Serotonin stable');
+    }
+    expect(await targetToken.getProperties()).to.be.empty;
+  });
+
+  itSub('Deletes properties of a nested token according to permissions', async ({helper}) =>  {
+    const collectionA = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const collectionB = await helper.nft.mintCollection(alice, {
+      tokenPropertyPermissions: permissions.flatMap(({permission, signers}, i) =>
+        signers.map(signer => ({key: `${i+1}_${signer.address}`, permission}))),
+    });
+    const targetToken = await collectionA.mintToken(alice);
+    const nestedToken = await collectionB.mintToken(alice, targetToken.nestingAccount());
+
+    await collectionB.addAdmin(alice, {Substrate: bob.address});
+    await targetToken.transfer(alice, {Substrate: charlie.address});
+
+    const propertyKeys: string[] = [];
+    let i = 0;
+    for(const permission of permissions) {
+      i++;
+      if(!permission.permission.mutable) continue;
+
+      let j = 0;
+      for(const signer of permission.signers) {
+        j++;
+        const key = i + '_' + signer.address;
+        propertyKeys.push(key);
+
+        await expect(
+          nestedToken.setProperties(signer, [{key, value: 'Serotonin increase'}]),
+          `on adding property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+
+        await expect(
+          nestedToken.deleteProperties(signer, [key]),
+          `on deleting property #${i} by signer #${j}`,
+        ).to.be.fulfilled;
+      }
+    }
+
+    expect(await nestedToken.getProperties(propertyKeys)).to.be.empty;
+    expect((await nestedToken.getData())!.properties).to.be.empty;
+    expect(await targetToken.getProperties()).to.be.empty;
+  });
+
+  [
+    {mode: 'nft' as const, storage: 'nonfungible' as const, pieces: undefined, requiredPallets: []} as const,
+    {mode: 'rft' as const, storage: 'refungible' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]} as const,
+  ].map(testCase =>
+    itSub.ifWithPallets(`Allows modifying a token property multiple times with the same size (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testCase.mode].mintCollection(alice, {
+        tokenPropertyPermissions: [
+          {
+            key: propKey,
+            permission: {mutable: true, tokenOwner: true},
+          },
+        ],
+      });
+
+      const maxTokenPropertiesSize = 32768;
+
+      const propDataSize = 4096;
+
+      let propDataChar = 'a';
+      const makeNewPropData = () => {
+        propDataChar = String.fromCharCode(propDataChar.charCodeAt(0) + 1);
+        return `${propDataChar}`.repeat(propDataSize);
+      };
+
+      const token = await (
+        testCase.pieces
+          ? collection.mintToken(alice, testCase.pieces as any)
+          : collection.mintToken(alice)
+      );
+
+      const property = {key: propKey, value: makeNewPropData()};
+      await token.setProperties(alice, [property]);
+      const originalSpace = await token.getTokenPropertiesConsumedSpace();
+      expect(originalSpace).to.be.equal(sizeOfProperty(property));
+
+      const sameSizePropertiesPossibleNum = maxTokenPropertiesSize / propDataSize;
+
+      // It is possible to modify a property as many times as needed.
+      // It will not consume any additional space.
+      for(let i = 0; i < sameSizePropertiesPossibleNum + 1; i++) {
+        await token.setProperties(alice, [{key: propKey, value: makeNewPropData()}]);
+        const consumedSpace = await token.getTokenPropertiesConsumedSpace();
+        expect(consumedSpace).to.be.equal(originalSpace);
+      }
+    }));
+
+  [
+    {mode: 'nft' as const, pieces: undefined, requiredPallets: []},
+    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]},
+  ].map(testCase =>
+    itSub.ifWithPallets(`Adding then removing a token property doesn't change the consumed space (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testCase.mode].mintCollection(alice, {
+        tokenPropertyPermissions: [
+          {
+            key: propKey,
+            permission: {mutable: true, tokenOwner: true},
+          },
+        ],
+      });
+      const token = await (
+        testCase.pieces
+          ? collection.mintToken(alice, testCase.pieces as any)
+          : collection.mintToken(alice)
+      );
+      const originalSpace = await token.getTokenPropertiesConsumedSpace();
+
+      const propDataSize = 4096;
+      const propData = 'a'.repeat(propDataSize);
+
+      const property = {key: propKey, value: propData};
+      await token.setProperties(alice, [property]);
+      let consumedSpace = await token.getTokenPropertiesConsumedSpace();
+      expect(consumedSpace).to.be.equal(sizeOfProperty(property));
+
+      await token.deleteProperties(alice, [propKey]);
+      consumedSpace = await token.getTokenPropertiesConsumedSpace();
+      expect(consumedSpace).to.be.equal(originalSpace);
+    }));
+
+  [
+    {mode: 'nft' as const, pieces: undefined, requiredPallets: []},
+    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]},
+  ].map(testCase =>
+    itSub.ifWithPallets(`Modifying a token property with different sizes correctly changes the consumed space (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testCase.mode].mintCollection(alice, {
+        tokenPropertyPermissions: [
+          {
+            key: propKey,
+            permission: {mutable: true, tokenOwner: true},
+          },
+        ],
+      });
+      const token = await (
+        testCase.pieces
+          ? collection.mintToken(alice, testCase.pieces as any)
+          : collection.mintToken(alice)
+      );
+      const originalSpace = await token.getTokenPropertiesConsumedSpace();
+
+      const initProp = {key: propKey, value: 'a'.repeat(4096)};
+      const biggerProp = {key: propKey, value: 'b'.repeat(5000)};
+      const smallerProp = {key: propKey, value: 'c'.repeat(4000)};
+
+      let consumedSpace;
+      let expectedConsumedSpaceDiff;
+
+      await token.setProperties(alice, [initProp]);
+      consumedSpace = await token.getTokenPropertiesConsumedSpace();
+      expectedConsumedSpaceDiff = sizeOfProperty(initProp) - originalSpace;
+      expect(consumedSpace).to.be.equal(originalSpace + expectedConsumedSpaceDiff);
+
+      await token.setProperties(alice, [biggerProp]);
+      consumedSpace = await token.getTokenPropertiesConsumedSpace();
+      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(initProp);
+      expect(consumedSpace).to.be.equal(sizeOfProperty(initProp) + expectedConsumedSpaceDiff);
+
+      await token.setProperties(alice, [smallerProp]);
+      consumedSpace = await token.getTokenPropertiesConsumedSpace();
+      expectedConsumedSpaceDiff = sizeOfProperty(biggerProp) - sizeOfProperty(smallerProp);
+      expect(consumedSpace).to.be.equal(sizeOfProperty(biggerProp) - expectedConsumedSpaceDiff);
+    }));
+
+  itSub('Set sponsored properties', async({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {tokenPropertyPermissions: [{key: 'k', permission: {tokenOwner: true}}]});
+
+    await collection.setSponsor(alice, alice.address);
+    await collection.confirmSponsorship(alice);
+    await collection.setPermissions(alice, {access: 'AllowList', mintMode: true});
+    await collection.addToAllowList(alice, {Substrate: bob.address});
+    await collection.setLimits(alice, {sponsoredDataRateLimit: {blocks: 30}});
+
+    const token = await collection.mintToken(alice, {Substrate: bob.address});
+
+    const aliceBalanceBefore = await helper.balance.getSubstrate(alice.address);
+    const bobBalanceBefore = await helper.balance.getSubstrate(bob.address);
+
+    await token.setProperties(bob, [{key: 'k', value: 'val'}]);
+
+    const aliceBalanceAfter = await helper.balance.getSubstrate(alice.address);
+    const bobBalanceAfter = await helper.balance.getSubstrate(bob.address);
+
+    expect(bobBalanceAfter).to.be.equal(bobBalanceBefore);
+    expect(aliceBalanceBefore > aliceBalanceAfter).to.be.true;
+  });
+});
+
+describe('Negative Integration Test: Token Properties', () => {
+  let alice: IKeyringPair; // collection owner
+  let bob: IKeyringPair; // collection admin
+  let charlie: IKeyringPair; // token owner
+
+  let constitution: {permission: any, signers: IKeyringPair[], sinner: IKeyringPair}[];
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      let dave: IKeyringPair;
+      [alice, bob, charlie, dave] = await helper.arrange.createAccounts([100n, 100n, 100n, 100n], donor);
+
+      // todo:playgrounds probably separate these tests later
+      constitution = [
+        {permission: {mutable: true, collectionAdmin: true}, signers: [alice, bob], sinner: charlie},
+        {permission: {mutable: false, collectionAdmin: true}, signers: [alice, bob], sinner: charlie},
+        {permission: {mutable: true, tokenOwner: true}, signers: [charlie], sinner: alice},
+        {permission: {mutable: false, tokenOwner: true}, signers: [charlie], sinner: alice},
+        {permission: {mutable: true, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie], sinner: dave},
+        {permission: {mutable: false, collectionAdmin: true, tokenOwner: true}, signers: [alice, bob, charlie], sinner: dave},
+      ];
+    });
+  });
+
+  [
+    {mode: 'nft' as const, requiredPallets: [Pallets.NFT]},
+    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
+  ].map(testCase =>
+    itSub.ifWithPallets(`Forbids adding/deleting properties of a token if token doesn't exist (${testCase.mode.toLocaleUpperCase})`, testCase.requiredPallets, async({helper}) => {
+      const collection = await helper[testCase.mode].mintCollection(alice, {
+        tokenPropertyPermissions: constitution.slice(0, 1).map(({permission}) => ({key: '1', permission})),
+      });
+      const nonExistentToken = collection.getTokenObject(1);
+
+      await expect(
+        nonExistentToken.setProperties(alice, [{key: '1', value: 'Serotonin increase'}]),
+        'on expecting failure whilst adding a property by alice',
+      ).to.be.rejectedWith(/common\.TokenNotFound/);
+
+      await expect(
+        nonExistentToken.deleteProperties(alice, ['1']),
+        'on expecting failure whilst deleting a property by alice',
+      ).to.be.rejectedWith(/common\.TokenNotFound/);
+    }));
+
+  async function mintCollectionWithAllPermissionsAndToken(helper: UniqueHelper, mode: 'NFT' | 'RFT'): Promise<[UniqueNFToken | UniqueRFToken, bigint]> {
+    const collection = await (mode == 'NFT' ? helper.nft : helper.rft).mintCollection(alice, {
+      tokenPropertyPermissions: constitution.map(({permission}, i) => ({key: `${i+1}`, permission})),
+    });
+    return mode == 'NFT' ? [await collection.mintToken(alice), 1n] : [await collection.mintToken(alice, 100n as any), 100n];
+  }
+
+  async function getConsumedSpace(api: any, collectionId: number, tokenId: number, mode: 'NFT' | 'RFT'): Promise<number> {
+    return (await (mode == 'NFT' ? api.query.nonfungible : api.query.refungible).tokenProperties(collectionId, tokenId)).toJSON().consumedSpace;
+  }
+
+  async function prepare(token: UniqueNFToken | UniqueRFToken, pieces: bigint): Promise<number> {
+    await token.collection.addAdmin(alice, {Substrate: bob.address});
+    await token.transfer(alice, {Substrate: charlie.address}, pieces);
+
+    let i = 0;
+    for(const passage of constitution) {
+      i++;
+      const signer = passage.signers[0];
+      await expect(
+        token.setProperties(signer, [{key: `${i}`, value: 'Serotonin increase'}]),
+        `on adding property ${i} by ${signer.address}`,
+      ).to.be.fulfilled;
+    }
+
+    const originalSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
+    return originalSpace;
+  }
+
+  async function testForbidsChangingDeletingPropertiesUserOutsideOfPermissions(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
+    const originalSpace = await prepare(token, pieces);
+
+    let i = 0;
+    for(const forbiddance of constitution) {
+      i++;
+      if(!forbiddance.permission.mutable) continue;
+
+      await expect(
+        token.setProperties(forbiddance.sinner, [{key: `${i}`, value: 'Serotonin down'}]),
+        `on failing to change property ${i} by the malefactor`,
+      ).to.be.rejectedWith(/common\.NoPermission/);
+
+      await expect(
+        token.deleteProperties(forbiddance.sinner, [`${i}`]),
+        `on failing to delete property ${i} by the malefactor`,
+      ).to.be.rejectedWith(/common\.NoPermission/);
+    }
+
+    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
+    expect(consumedSpace).to.be.equal(originalSpace);
+  }
+
+  itSub('Forbids changing/deleting properties of a token if the user is outside of permissions (NFT)', async ({helper}) =>  {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
+    await testForbidsChangingDeletingPropertiesUserOutsideOfPermissions(token, amount);
+  });
+
+  itSub.ifWithPallets('Forbids changing/deleting properties of a token if the user is outside of permissions (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
+    await testForbidsChangingDeletingPropertiesUserOutsideOfPermissions(token, amount);
+  });
+
+  async function testForbidsChangingDeletingPropertiesIfPropertyImmutable(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
+    const originalSpace = await prepare(token, pieces);
+
+    let i = 0;
+    for(const permission of constitution) {
+      i++;
+      if(permission.permission.mutable) continue;
+
+      await expect(
+        token.setProperties(permission.signers[0], [{key: `${i}`, value: 'Serotonin down'}]),
+        `on failing to change property ${i} by signer #0`,
+      ).to.be.rejectedWith(/common\.NoPermission/);
+
+      await expect(
+        token.deleteProperties(permission.signers[0], [i.toString()]),
+        `on failing to delete property ${i} by signer #0`,
+      ).to.be.rejectedWith(/common\.NoPermission/);
+    }
+
+    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
+    expect(consumedSpace).to.be.equal(originalSpace);
+  }
+
+  itSub('Forbids changing/deleting properties of a token if the property is permanent (immutable) (NFT)', async ({helper}) =>  {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
+    await testForbidsChangingDeletingPropertiesIfPropertyImmutable(token, amount);
+  });
+
+  itSub.ifWithPallets('Forbids changing/deleting properties of a token if the property is permanent (immutable) (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
+    await testForbidsChangingDeletingPropertiesIfPropertyImmutable(token, amount);
+  });
+
+  async function testForbidsAddingPropertiesIfPropertyNotDeclared(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
+    const originalSpace = await prepare(token, pieces);
+
+    await expect(
+      token.setProperties(alice, [{key: 'non-existent', value: 'I exist!'}]),
+      'on failing to add a previously non-existent property',
+    ).to.be.rejectedWith(/common\.NoPermission/);
+
+    await expect(
+      token.collection.setTokenPropertyPermissions(alice, [{key: 'now-existent', permission: {}}]),
+      'on setting a new non-permitted property',
+    ).to.be.fulfilled;
+
+    await expect(
+      token.setProperties(alice, [{key: 'now-existent', value: 'I exist!'}]),
+      'on failing to add a property forbidden by the \'None\' permission',
+    ).to.be.rejectedWith(/common\.NoPermission/);
+
+    expect(await token.getProperties(['non-existent', 'now-existent'])).to.be.empty;
+
+    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
+    expect(consumedSpace).to.be.equal(originalSpace);
+  }
+
+  itSub('Forbids adding properties to a token if the property is not declared / forbidden with the \'None\' permission (NFT)', async ({helper}) =>  {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
+    await testForbidsAddingPropertiesIfPropertyNotDeclared(token, amount);
+  });
+
+  itSub.ifWithPallets('Forbids adding properties to a token if the property is not declared / forbidden with the \'None\' permission (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
+    await testForbidsAddingPropertiesIfPropertyNotDeclared(token, amount);
+  });
+
+  async function testForbidsAddingTooLargeProperties(token: UniqueNFToken | UniqueRFToken, pieces: bigint) {
+    const originalSpace = await prepare(token, pieces);
+
+    await expect(
+      token.collection.setTokenPropertyPermissions(alice, [
+        {key: 'a_holy_book', permission: {collectionAdmin: true, tokenOwner: true}},
+        {key: 'young_years', permission: {collectionAdmin: true, tokenOwner: true}},
+      ]),
+      'on setting new permissions for properties',
+    ).to.be.fulfilled;
+
+    // Mute the general tx parsing error
+    {
+      console.error = () => {};
+      await expect(token.setProperties(alice, [{key: 'a_holy_book', value: 'word '.repeat(6554)}]))
+        .to.be.rejected;
+    }
+
+    await expect(token.setProperties(alice, [
+      {key: 'a_holy_book', value: 'word '.repeat(3277)},
+      {key: 'young_years', value: 'neverending'.repeat(1490)},
+    ])).to.be.rejectedWith(/common\.NoSpaceForProperty/);
+
+    expect(await token.getProperties(['a_holy_book', 'young_years'])).to.be.empty;
+    const consumedSpace = await getConsumedSpace(token.collection.helper.getApi(), token.collectionId, token.tokenId, pieces == 1n ? 'NFT' : 'RFT');
+    expect(consumedSpace).to.be.equal(originalSpace);
+  }
+
+  itSub('Forbids adding too large properties to a token (NFT)', async ({helper}) =>  {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'NFT');
+    await testForbidsAddingTooLargeProperties(token, amount);
+  });
+
+  itSub.ifWithPallets('Forbids adding too large properties to a token (ReFungible)', [Pallets.ReFungible], async ({helper}) => {
+    const [token, amount] = await mintCollectionWithAllPermissionsAndToken(helper, 'RFT');
+    await testForbidsAddingTooLargeProperties(token, amount);
+  });
+
+  [
+    {mode: 'nft' as const, requiredPallets: []},
+    {mode: 'rft' as const, requiredPallets: [Pallets.ReFungible]},
+  ].map(testCase =>
+    itSub.ifWithPallets(`Forbids adding too many propeties to a token (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
+      const collection = await helper[testCase.mode].mintCollection(alice);
+      const maxPropertiesPerItem = 64;
+
+      for(let i = 0; i < maxPropertiesPerItem; i++) {
+        await collection.setTokenPropertyPermissions(alice, [{
+          key: `${i+1}`,
+          permission: {mutable: true, tokenOwner: true, collectionAdmin: true},
+        }]);
+      }
+
+      await expect(collection.setTokenPropertyPermissions(alice, [{
+        key: `${maxPropertiesPerItem}-th`,
+        permission: {mutable: true, tokenOwner: true, collectionAdmin: true},
+      }])).to.be.rejectedWith(/common\.PropertyLimitReached/);
+    }));
+
+  [
+    {mode: 'nft' as const, pieces: undefined, requiredPallets: []},
+    {mode: 'rft' as const, pieces: 100n, requiredPallets: [Pallets.ReFungible]},
+  ].map(testCase =>
+    itSub.ifWithPallets(`Forbids force_repair_item from non-sudo (${testCase.mode})`, testCase.requiredPallets, async({helper}) => {
+      const propKey = 'tok-prop';
+
+      const collection = await helper[testCase.mode].mintCollection(alice, {
+        tokenPropertyPermissions: [
+          {
+            key: propKey,
+            permission: {mutable: true, tokenOwner: true},
+          },
+        ],
+      });
+      const token = await (
+        testCase.pieces
+          ? collection.mintToken(alice, testCase.pieces as any)
+          : collection.mintToken(alice)
+      );
+
+      const propDataSize = 4096;
+      const propData = 'a'.repeat(propDataSize);
+      await token.setProperties(alice, [{key: propKey, value: propData}]);
+
+      await expect(helper.executeExtrinsic(alice, 'api.tx.unique.forceRepairItem', [token.collectionId, token.tokenId], true))
+        .to.be.rejectedWith(/BadOrigin/);
+    }));
+});
+
+describe('ReFungible token properties permissions tests', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+  let charlie: IKeyringPair;
+
+  before(async function() {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      requirePalletsOrSkip(this, helper, [Pallets.ReFungible]);
+
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob, charlie] = await helper.arrange.createAccounts([100n, 100n, 100n], donor);
+    });
+  });
+
+  async function prepare(helper: UniqueHelper): Promise<UniqueRFToken> {
+    const collection = await helper.rft.mintCollection(alice);
+    const token = await collection.mintToken(alice, 100n);
+
+    await collection.addAdmin(alice, {Substrate: bob.address});
+    await collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable: true, tokenOwner: true}}]);
+
+    return token;
+  }
+
+  itSub('Forbids adding token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) =>  {
+    const token = await prepare(helper);
+
+    await token.transfer(alice, {Substrate: charlie.address}, 33n);
+
+    await expect(token.setProperties(alice, [
+      {key: 'fractals', value: 'multiverse'},
+    ])).to.be.rejectedWith(/common\.NoPermission/);
+  });
+
+  itSub('Forbids mutating token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) =>  {
+    const token = await prepare(helper);
+
+    await expect(token.collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable:true, tokenOwner: true}}]))
+      .to.be.fulfilled;
+
+    await expect(token.setProperties(alice, [
+      {key: 'fractals', value: 'multiverse'},
+    ])).to.be.fulfilled;
+
+    await token.transfer(alice, {Substrate: charlie.address}, 33n);
+
+    await expect(token.setProperties(alice, [
+      {key: 'fractals', value: 'want to rule the world'},
+    ])).to.be.rejectedWith(/common\.NoPermission/);
+  });
+
+  itSub('Forbids deleting token property with tokenOwner==true when signer doesn\'t have all pieces', async ({helper}) =>  {
+    const token = await prepare(helper);
+
+    await expect(token.setProperties(alice, [
+      {key: 'fractals', value: 'one headline - why believe it'},
+    ])).to.be.fulfilled;
+
+    await token.transfer(alice, {Substrate: charlie.address}, 33n);
+
+    await expect(token.deleteProperties(alice, ['fractals'])).
+      to.be.rejectedWith(/common\.NoPermission/);
+  });
+
+  itSub('Allows token property mutation with collectionOwner==true when admin doesn\'t have all pieces', async ({helper}) =>  {
+    const token = await prepare(helper);
+
+    await token.transfer(alice, {Substrate: charlie.address}, 33n);
+
+    await expect(token.collection.setTokenPropertyPermissions(alice, [{key: 'fractals', permission: {mutable:true, collectionAdmin: true}}]))
+      .to.be.fulfilled;
+
+    await expect(token.setProperties(alice, [
+      {key: 'fractals', value: 'multiverse'},
+    ])).to.be.fulfilled;
+  });
+});
addedjs-packages/tests/sub/nesting/unnest.test.tsdiffbeforeafterboth
--- /dev/null
+++ b/js-packages/tests/sub/nesting/unnest.test.ts
@@ -0,0 +1,325 @@
+// 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 type {IKeyringPair} from '@polkadot/types/types';
+import {expect, itSub, Pallets, usingPlaygrounds} from '../../util/index.js';
+import {CrossAccountId, UniqueFTCollection, UniqueNFToken, UniqueRFToken} from '@unique/playgrounds/unique.js';
+
+describe('Integration Test: Unnesting', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+  let charlie: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob, charlie] = await helper.arrange.createAccounts([200n, 50n, 50n], donor);
+    });
+  });
+
+  itSub('NFT: allows the owner to successfully unnest a token', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const targetToken = await collection.mintToken(alice);
+
+    // Create a nested token
+    const nestedToken = await collection.mintToken(alice, targetToken.nestingAccount());
+
+    // Unnest
+    await expect(nestedToken.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}), 'while unnesting').to.be.fulfilled;
+    expect(await nestedToken.getOwner()).to.be.deep.equal({Substrate: alice.address});
+
+    // Nest and burn
+    await nestedToken.nest(alice, targetToken);
+    await expect(nestedToken.burnFrom(alice, targetToken.nestingAccount()), 'while burning').to.be.fulfilled;
+    await expect(nestedToken.getOwner()).to.be.rejected;
+  });
+
+  itSub('NativeFungible: allows the owner to successfully unnest a token', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const targetToken = await collection.mintToken(alice);
+
+    const collectionFT = helper.ft.getCollectionObject(0);
+
+    // Nest
+    await collectionFT.transfer(alice, targetToken.nestingAccount(), 10n);
+    // Unnest
+    await expect(collectionFT.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}, 9n), 'while unnesting').to.be.fulfilled;
+
+    expect(await collectionFT.getBalance(targetToken.nestingAccount())).to.be.equal(1n);
+  });
+
+  itSub('Fungible: allows the owner to successfully unnest a token', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const targetToken = await collection.mintToken(alice);
+
+    const collectionFT = await helper.ft.mintCollection(alice);
+
+    // Nest and unnest
+    await collectionFT.mint(alice, 10n, targetToken.nestingAccount());
+    await expect(collectionFT.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}, 9n), 'while unnesting').to.be.fulfilled;
+    expect(await collectionFT.getBalance({Substrate: alice.address})).to.be.equal(9n);
+    expect(await collectionFT.getBalance(targetToken.nestingAccount())).to.be.equal(1n);
+
+    // Nest and burn
+    await collectionFT.transfer(alice, targetToken.nestingAccount(), 5n);
+    await expect(collectionFT.burnTokensFrom(alice, targetToken.nestingAccount(), 6n), 'while burning').to.be.fulfilled;
+    expect(await collectionFT.getBalance({Substrate: alice.address})).to.be.equal(4n);
+    expect(await collectionFT.getBalance(targetToken.nestingAccount())).to.be.equal(0n);
+    expect(await targetToken.getChildren()).to.be.length(0);
+  });
+
+  itSub.ifWithPallets('ReFungible: allows the owner to successfully unnest a token', [Pallets.ReFungible], async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const targetToken = await collection.mintToken(alice);
+
+    const collectionRFT = await helper.rft.mintCollection(alice);
+
+    // Nest and unnest
+    const token = await collectionRFT.mintToken(alice, 10n, targetToken.nestingAccount());
+    await expect(token.transferFrom(alice, targetToken.nestingAccount(), {Substrate: alice.address}, 9n), 'while unnesting').to.be.fulfilled;
+    expect(await token.getBalance({Substrate: alice.address})).to.be.equal(9n);
+    expect(await token.getBalance(targetToken.nestingAccount())).to.be.equal(1n);
+
+    // Nest and burn
+    await token.transfer(alice, targetToken.nestingAccount(), 5n);
+    await expect(token.burnFrom(alice, targetToken.nestingAccount(), 6n), 'while burning').to.be.fulfilled;
+    expect(await token.getBalance({Substrate: alice.address})).to.be.equal(4n);
+    expect(await token.getBalance(targetToken.nestingAccount())).to.be.equal(0n);
+    expect(await targetToken.getChildren()).to.be.length(0);
+  });
+
+  async function checkNestedAmountState({
+    expectedBalance,
+    childrenShouldPresent,
+    nested,
+    targetNft,
+  }: {
+    expectedBalance: bigint,
+    childrenShouldPresent: boolean,
+    nested: UniqueFTCollection | UniqueRFToken,
+    targetNft: UniqueNFToken,
+  }) {
+    const balance = await nested.getBalance(targetNft.nestingAccount());
+    expect(balance).to.be.equal(expectedBalance);
+
+    const children = await targetNft.getChildren();
+
+    if(childrenShouldPresent) {
+      expect(children[0]).to.be.deep.equal({
+        collectionId: nested.collectionId,
+        tokenId: (nested instanceof UniqueFTCollection) ? 0 : nested.tokenId,
+      });
+    } else {
+      expect(children.length).to.be.equal(0);
+    }
+  }
+
+  function ownerOrAdminUnnestCases(modes: ('ft' | 'nft' | 'rft')[]): {
+    mode: 'ft' | 'nft' | 'rft',
+    sender: string,
+    op: 'transfer' | 'burn',
+    requiredPallets: Pallets[],
+  }[] {
+    const senders = ['owner', 'admin'];
+    const ops = ['transfer', 'burn'];
+
+    const cases = [];
+    for(const mode of modes) {
+      const requiredPallets = (mode === 'rft')
+        ? [Pallets.ReFungible]
+        : [];
+
+      for(const sender of senders) {
+        for(const op of ops) {
+          cases.push({
+            mode: mode as 'ft' | 'nft' | 'rft',
+            sender,
+            op: op as 'transfer' | 'burn',
+            requiredPallets,
+          });
+        }
+      }
+    }
+
+    return cases;
+  }
+
+  ownerOrAdminUnnestCases(['ft', 'rft']).map(testCase =>
+    itSub.ifWithPallets(`[${testCase.mode}]: allows a collection ${testCase.sender} to ${testCase.op} nested token`, testCase.requiredPallets, async({helper}) => {
+      const owner = alice;
+      const admin = bob;
+
+      const unnester = (testCase.sender === 'owner')
+        ? owner
+        : admin;
+
+      const collectionNFT = await helper.nft.mintCollection(owner);
+      await collectionNFT.setPermissions(owner, {nesting: {tokenOwner: true}});
+
+      const collectionNested = await helper[testCase.mode as 'ft' | 'rft'].mintCollection(owner, {
+        limits: {
+          ownerCanTransfer: true,
+        },
+      });
+      await collectionNested.addAdmin(owner, {Substrate: admin.address});
+
+      const targetNft = await collectionNFT.mintToken(owner, {Substrate: charlie.address});
+
+      let nested: UniqueFTCollection | UniqueRFToken;
+      const totalAmount = 5n;
+      const firstUnnestAmount = 2n;
+      const restUnnestAmount = totalAmount - firstUnnestAmount;
+
+      if(collectionNested instanceof UniqueFTCollection) {
+        await collectionNested.mint(owner, totalAmount, {Substrate: charlie.address});
+        nested = collectionNested;
+      } else {
+        nested = await collectionNested.mintToken(owner, totalAmount, {Substrate: charlie.address});
+      }
+
+      // transfer/burn `amount` of nested assets by `unnester`.
+      const doOperationAndCheck = async ({
+        amount,
+        shouldBeNestedAfterOp,
+      }: {
+        amount: bigint,
+        shouldBeNestedAfterOp: boolean,
+      }) => {
+        const nestedBalanceBeforeOp = await nested.getBalance(targetNft.nestingAccount());
+
+        if(testCase.op === 'transfer') {
+          const bobBalanceBeforeOp = await nested.getBalance({Substrate: bob.address});
+
+          await nested.transferFrom(unnester, targetNft.nestingAccount(), {Substrate: bob.address}, amount);
+          expect(await nested.getBalance({Substrate: bob.address})).to.be.equal(bobBalanceBeforeOp + amount);
+        } else {
+          if(nested instanceof UniqueFTCollection) {
+            await nested.burnTokensFrom(unnester, targetNft.nestingAccount(), amount);
+          } else {
+            await nested.burnFrom(unnester, targetNft.nestingAccount(), amount);
+          }
+        }
+
+        await checkNestedAmountState({
+          expectedBalance: nestedBalanceBeforeOp - amount,
+          childrenShouldPresent: shouldBeNestedAfterOp,
+          nested,
+          targetNft,
+        });
+      };
+
+      // Initial setup: nest (fungibles/rft parts).
+      // Check NFT's balance of nested assets and NFT's children.
+      await nested.transfer(charlie, targetNft.nestingAccount(), totalAmount);
+      await checkNestedAmountState({
+        expectedBalance: totalAmount,
+        childrenShouldPresent: true,
+        nested,
+        targetNft,
+      });
+
+      // Transfer/burn only a part of nested assets.
+      // Check that NFT's balance of the nested assets correctly decreased and NFT's children are not changed.
+      await doOperationAndCheck({
+        amount: firstUnnestAmount,
+        shouldBeNestedAfterOp: true,
+      });
+
+      // Transfer/burn all remaining nested assets.
+      // Check that NFT's balance of the nested assets is 0 and NFT has no more children.
+      await doOperationAndCheck({
+        amount: restUnnestAmount,
+        shouldBeNestedAfterOp: false,
+      });
+    }));
+
+  ownerOrAdminUnnestCases(['nft']).map(testCase =>
+    itSub(`[nft]: allows a collection ${testCase.sender} to ${testCase.op} nested token`, async ({helper}) => {
+      const owner = alice;
+      const admin = bob;
+
+      const unnester = (testCase.sender === 'owner')
+        ? owner
+        : admin;
+
+      const collectionNFT = await helper.nft.mintCollection(owner);
+      await collectionNFT.setPermissions(owner, {nesting: {tokenOwner: true}});
+
+      const collectionNested = await helper.nft.mintCollection(owner, {
+        limits: {
+          ownerCanTransfer: true,
+        },
+      });
+      await collectionNested.addAdmin(owner, {Substrate: admin.address});
+
+      const targetNft = await collectionNFT.mintToken(owner, {Substrate: charlie.address});
+      const nested = await collectionNested.mintToken(owner, {Substrate: charlie.address});
+
+      await nested.transfer(charlie, targetNft.nestingAccount());
+      expect(await targetNft.getChildren()).to.be.deep.equal([{
+        collectionId: nested.collectionId,
+        tokenId: nested.tokenId,
+      }]);
+
+      if(testCase.op === 'transfer') {
+        await nested.transferFrom(unnester, targetNft.nestingAccount(), {Substrate: bob.address});
+      } else {
+        await nested.burnFrom(unnester, targetNft.nestingAccount());
+      }
+
+      expect((await targetNft.getChildren()).length).to.be.equal(0);
+    }));
+});
+
+describe('Negative Test: Unnesting', () => {
+  let alice: IKeyringPair;
+  let bob: IKeyringPair;
+
+  before(async () => {
+    await usingPlaygrounds(async (helper, privateKey) => {
+      const donor = await privateKey({url: import.meta.url});
+      [alice, bob] = await helper.arrange.createAccounts([50n, 10n], donor);
+    });
+  });
+
+  itSub('Disallows a non-owner to unnest/burn a token', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const targetToken = await collection.mintToken(alice);
+
+    // Create a nested token
+    const nestedToken = await collection.mintToken(alice, targetToken.nestingAccount());
+
+    // Try to unnest
+    await expect(nestedToken.unnest(bob, targetToken, {Substrate: alice.address})).to.be.rejectedWith(/common\.ApprovedValueTooLow/);
+    expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
+
+    // Try to burn
+    await expect(nestedToken.burnFrom(bob, targetToken.nestingAccount())).to.be.rejectedWith(/common\.ApprovedValueTooLow/);
+    expect(await nestedToken.getOwner()).to.be.deep.equal(CrossAccountId.toLowerCase(targetToken.nestingAccount()));
+  });
+
+  // todo another test for creating excessive depth matryoshka with Ethereum?
+
+  // Recursive nesting
+  itSub('Prevents Ouroboros creation', async ({helper}) => {
+    const collection = await helper.nft.mintCollection(alice, {permissions: {nesting: {tokenOwner: true}}});
+    const targetToken = await collection.mintToken(alice);
+
+    // Fail to create a nested token ouroboros
+    const nestedToken = await collection.mintToken(alice, targetToken.nestingAccount());
+    await expect(targetToken.nest(alice, nestedToken)).to.be.rejectedWith(/^structure\.OuroborosDetected$/);
+  });
+});
modifiedjs-packages/tests/util/globalSetup.tsdiffbeforeafterboth
--- a/js-packages/tests/util/globalSetup.ts
+++ b/js-packages/tests/util/globalSetup.ts
@@ -81,7 +81,7 @@
         if(aliceBalance < MINIMUM_DONOR_FUND * oneToken) {
           tx.push(helper.executeExtrinsic(
             alice,
-            'api.tx.balances.transfer',
+            'api.tx.balances.transferKeepAlive',
             [account.address, DONOR_FUNDING * oneToken],
             true,
             {nonce: nonce + balanceGrantedCounter++},
modifiednode/cli/src/service.rsdiffbeforeafterboth
--- a/node/cli/src/service.rs
+++ b/node/cli/src/service.rs
@@ -419,6 +419,7 @@
 				Box::new(block_announce_validator)
 			})),
 			warp_sync_params: None,
+			block_relay: None,
 		})?;
 
 	let select_chain = params.select_chain.clone();
@@ -778,6 +779,8 @@
 		},
 		collator_key,
 		relay_chain_slot_duration,
+		#[cfg(not(feature = "lookahead"))]
+		collation_request_receiver: None,
 	};
 
 	task_manager.spawn_essential_handle().spawn(
@@ -887,6 +890,7 @@
 			import_queue,
 			block_announce_validator_builder: None,
 			warp_sync_params: None,
+			block_relay: None,
 		})?;
 
 	let collator = config.role.is_authority();
modifiedpallets/evm-transaction-payment/src/lib.rsdiffbeforeafterboth
--- a/pallets/evm-transaction-payment/src/lib.rs
+++ b/pallets/evm-transaction-payment/src/lib.rs
@@ -171,13 +171,13 @@
 		origin: &T::CrossAccountId,
 	) -> Result<(), TransactionValidationError> {
 		let who = &v.who;
-		let max_fee_per_gas = Some(v.transaction_fee_input()?.0);
+		let max_fee_per_gas = v.transaction_fee_input()?.0;
 		let gas_limit = v.transaction.gas_limit.low_u64();
 		let reason = if let Some(to) = v.transaction.to {
 			WithdrawReason::Call {
 				target: to,
 				input: v.transaction.input.clone(),
-				max_fee_per_gas,
+				max_fee_per_gas: Some(max_fee_per_gas),
 				gas_limit,
 				is_transactional: v.config.is_transactional,
 				is_check: true,
@@ -187,7 +187,7 @@
 		};
 		let sponsor = get_sponsor::<T>(
 			*origin.as_eth(),
-			max_fee_per_gas,
+			Some(max_fee_per_gas),
 			gas_limit,
 			&reason,
 			v.config.is_transactional,
@@ -196,9 +196,7 @@
 		.as_ref()
 		.map(pallet_evm::Pallet::<T>::account_basic_by_id)
 		.map(|v| v.0);
-		let fee = max_fee_per_gas
-			.unwrap()
-			.saturating_mul(v.transaction.gas_limit);
+		let fee = max_fee_per_gas.saturating_mul(v.transaction.gas_limit);
 		if let Some(sponsor) = sponsor.as_ref() {
 			if who.balance < v.transaction.value || sponsor.balance < fee {
 				return Err(TransactionValidationError::BalanceTooLow);
modifiedpallets/inflation/Cargo.tomldiffbeforeafterboth
--- a/pallets/inflation/Cargo.toml
+++ b/pallets/inflation/Cargo.toml
@@ -16,6 +16,7 @@
 
 [features]
 default = ['std']
+fast-inflation = []
 runtime-benchmarks = ['frame-benchmarking']
 std = [
 	'frame-benchmarking/std',
@@ -27,7 +28,6 @@
 	'sp-std/std',
 ]
 try-runtime = ["frame-support/try-runtime"]
-fast-inflation = []
 
 [dependencies]
 parity-scale-codec = { workspace = true }
modifiedprimitives/common/src/constants.rsdiffbeforeafterboth
--- a/primitives/common/src/constants.rs
+++ b/primitives/common/src/constants.rs
@@ -26,7 +26,7 @@
 #[cfg(not(feature = "lookahead"))]
 pub const MILLISECS_PER_BLOCK: u64 = 12000;
 #[cfg(feature = "lookahead")]
-pub const MILLISECS_PER_BLOCK: u64 = 3000;
+pub const MILLISECS_PER_BLOCK: u64 = 6000;
 pub const MILLISECS_PER_RELAY_BLOCK: u64 = 6000;
 
 pub const SLOT_DURATION: u64 = MILLISECS_PER_BLOCK;
modifiedruntime/common/config/pallets/preimage.rsdiffbeforeafterboth
--- a/runtime/common/config/pallets/preimage.rs
+++ b/runtime/common/config/pallets/preimage.rs
@@ -14,14 +14,18 @@
 // You should have received a copy of the GNU General Public License
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
-use frame_support::parameter_types;
+use frame_support::{
+	parameter_types,
+	traits::{fungible::HoldConsideration, LinearStoragePrice},
+};
 use frame_system::EnsureRoot;
 use up_common::constants::*;
 
-use crate::{AccountId, Balance, Balances, Runtime, RuntimeEvent};
+use crate::{AccountId, Balance, Balances, Runtime, RuntimeEvent, RuntimeHoldReason};
 
 parameter_types! {
 	pub PreimageBaseDeposit: Balance = 1000 * UNIQUE;
+	pub const PreimageHoldReason: RuntimeHoldReason = RuntimeHoldReason::Preimage(pallet_preimage::HoldReason::Preimage);
 }
 
 impl pallet_preimage::Config for Runtime {
@@ -29,6 +33,10 @@
 	type RuntimeEvent = RuntimeEvent;
 	type Currency = Balances;
 	type ManagerOrigin = EnsureRoot<AccountId>;
-	type BaseDeposit = PreimageBaseDeposit;
-	type ByteDeposit = TransactionByteFee;
+	type Consideration = HoldConsideration<
+		AccountId,
+		Balances,
+		PreimageHoldReason,
+		LinearStoragePrice<PreimageBaseDeposit, TransactionByteFee, Balance>,
+	>;
 }
modifiedruntime/common/config/parachain.rsdiffbeforeafterboth
--- a/runtime/common/config/parachain.rs
+++ b/runtime/common/config/parachain.rs
@@ -26,7 +26,7 @@
 
 impl cumulus_pallet_parachain_system::Config for Runtime {
 	type RuntimeEvent = RuntimeEvent;
-	type SelfParaId = parachain_info::Pallet<Self>;
+	type SelfParaId = staging_parachain_info::Pallet<Self>;
 	type OnSystemEvent = ();
 	// type DownwardMessageHandlers = cumulus_primitives_utility::UnqueuedDmpAsParent<
 	// 	MaxDownwardMessageWeight,
@@ -43,9 +43,11 @@
 	#[cfg(feature = "lookahead")]
 	type CheckAssociatedRelayNumber =
 		cumulus_pallet_parachain_system::RelayNumberMonotonicallyIncreases;
+	#[cfg(feature = "lookahead")]
+	type ConsensusHook = ConsensusHook;
 }
 
-impl parachain_info::Config for Runtime {}
+impl staging_parachain_info::Config for Runtime {}
 
 impl cumulus_pallet_aura_ext::Config for Runtime {}
 
modifiedruntime/common/config/substrate.rsdiffbeforeafterboth
--- a/runtime/common/config/substrate.rs
+++ b/runtime/common/config/substrate.rs
@@ -17,7 +17,10 @@
 use frame_support::{
 	dispatch::DispatchClass,
 	ord_parameter_types, parameter_types,
-	traits::{ConstBool, ConstU32, Everything, NeverEnsureOrigin},
+	traits::{
+		tokens::{PayFromAccount, UnityAssetBalanceConversion},
+		ConstBool, ConstU32, ConstU64, Everything, NeverEnsureOrigin,
+	},
 	weights::{
 		constants::{BlockExecutionWeight, ExtrinsicBaseWeight, RocksDbWeight},
 		ConstantMultiplier,
@@ -31,7 +34,7 @@
 use pallet_transaction_payment::{ConstFeeMultiplier, Multiplier};
 use sp_arithmetic::traits::One;
 use sp_runtime::{
-	traits::{AccountIdLookup, BlakeTwo256},
+	traits::{AccountIdLookup, BlakeTwo256, IdentityLookup},
 	Perbill, Percent, Permill,
 };
 use sp_std::vec;
@@ -39,7 +42,8 @@
 
 use crate::{
 	runtime_common::DealWithFees, Balances, Block, OriginCaller, PalletInfo, Runtime, RuntimeCall,
-	RuntimeEvent, RuntimeHoldReason, RuntimeOrigin, SS58Prefix, System, Version,
+	RuntimeEvent, RuntimeFreezeReason, RuntimeHoldReason, RuntimeOrigin, SS58Prefix, System,
+	Treasury, Version,
 };
 
 parameter_types! {
@@ -132,17 +136,16 @@
 	// Only root can perform this migration
 	type SignedFilter = EnsureSignedBy<TrieMigrationSigned, AccountId>;
 	type MaxKeyLen = MigrationMaxKeyLen;
-}
-
-parameter_types! {
-	pub const MinimumPeriod: u64 = SLOT_DURATION / 2;
 }
 
 impl pallet_timestamp::Config for Runtime {
 	/// A timestamp: milliseconds since the unix epoch.
 	type Moment = u64;
 	type OnTimestampSet = ();
-	type MinimumPeriod = MinimumPeriod;
+	#[cfg(not(feature = "lookahead"))]
+	type MinimumPeriod = ConstU64<{ SLOT_DURATION / 2 }>;
+	#[cfg(feature = "lookahead")]
+	type MinimumPeriod = ConstU64<0>;
 	type WeightInfo = ();
 }
 
@@ -171,6 +174,7 @@
 	type AccountStore = System;
 	type WeightInfo = pallet_balances::weights::SubstrateWeight<Self>;
 	type RuntimeHoldReason = RuntimeHoldReason;
+	type RuntimeFreezeReason = RuntimeFreezeReason;
 	type FreezeIdentifier = [u8; 16];
 	type MaxHolds = MaxHolds;
 	type MaxFreezes = MaxFreezes;
@@ -206,6 +210,7 @@
 	pub const BountyDepositBase: Balance = 1 * UNIQUE;
 	pub const BountyDepositPayoutDelay: BlockNumber = 1 * DAYS;
 	pub const TreasuryModuleId: PalletId = PalletId(*b"py/trsry");
+	pub TreasuryAccount: AccountId = Treasury::account_id();
 	pub const BountyUpdatePeriod: BlockNumber = 14 * DAYS;
 	pub const MaximumReasonLength: u32 = 16384;
 	pub const BountyCuratorDeposit: Permill = Permill::from_percent(50);
@@ -230,6 +235,14 @@
 	type SpendFunds = ();
 	type WeightInfo = pallet_treasury::weights::SubstrateWeight<Self>;
 	type MaxApprovals = MaxApprovals;
+	type AssetKind = ();
+	type Beneficiary = AccountId;
+	type BeneficiaryLookup = IdentityLookup<Self::Beneficiary>;
+	type Paymaster = PayFromAccount<Balances, TreasuryAccount>;
+	type BalanceConverter = UnityAssetBalanceConversion;
+	type PayoutPeriod = ConstU32<10>;
+	#[cfg(feature = "runtime-benchmarks")]
+	type BenchmarkHelper = ();
 }
 
 impl pallet_sudo::Config for Runtime {
@@ -247,6 +260,8 @@
 	type DisabledValidators = ();
 	type MaxAuthorities = MaxAuthorities;
 	type AllowMultipleBlocksPerSlot = ConstBool<true>;
+	#[cfg(feature = "lookahead")]
+	type SlotDuration = ConstU64<SLOT_DURATION>;
 }
 
 impl pallet_utility::Config for Runtime {
modifiedruntime/common/config/xcm/foreignassets.rsdiffbeforeafterboth
--- a/runtime/common/config/xcm/foreignassets.rs
+++ b/runtime/common/config/xcm/foreignassets.rs
@@ -132,7 +132,11 @@
 
 	fn check_out(_dest: &MultiLocation, _what: &MultiAsset, _context: &XcmContext) {}
 
-	fn deposit_asset(what: &MultiAsset, who: &MultiLocation, context: &XcmContext) -> XcmResult {
+	fn deposit_asset(
+		what: &MultiAsset,
+		who: &MultiLocation,
+		context: Option<&XcmContext>,
+	) -> XcmResult {
 		FungiblesTransactor::deposit_asset(what, who, context)
 	}
 
modifiedruntime/common/config/xcm/mod.rsdiffbeforeafterboth
--- a/runtime/common/config/xcm/mod.rs
+++ b/runtime/common/config/xcm/mod.rs
@@ -14,6 +14,7 @@
 // You should have received a copy of the GNU General Public License
 // along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
 
+use cumulus_primitives_core::ParaId;
 use frame_support::{
 	parameter_types,
 	traits::{ConstU32, Contains, Everything, Get, Nothing, ProcessMessageError},
@@ -21,6 +22,7 @@
 use frame_system::EnsureRoot;
 use pallet_xcm::XcmPassthrough;
 use polkadot_parachain_primitives::primitives::Sibling;
+use polkadot_runtime_common::xcm_sender::NoPriceForMessageDelivery;
 use sp_std::marker::PhantomData;
 use staging_xcm::{
 	latest::{prelude::*, MultiLocation, Weight},
@@ -283,7 +285,6 @@
 	type RuntimeEvent = RuntimeEvent;
 	type XcmExecutor = XcmExecutor<XcmExecutorConfig<Self>>;
 }
-
 impl cumulus_pallet_xcmp_queue::Config for Runtime {
 	type WeightInfo = ();
 	type RuntimeEvent = RuntimeEvent;
@@ -299,7 +300,7 @@
 	type ControllerOrigin = frame_system::EnsureRoot<AccountId>;
 
 	type ControllerOriginConverter = XcmOriginToTransactDispatchOrigin;
-	type PriceForSiblingDelivery = ();
+	type PriceForSiblingDelivery = NoPriceForMessageDelivery<ParaId>;
 }
 
 impl cumulus_pallet_dmp_queue::Config for Runtime {
modifiedruntime/common/construct_runtime.rsdiffbeforeafterboth
--- a/runtime/common/construct_runtime.rs
+++ b/runtime/common/construct_runtime.rs
@@ -24,7 +24,7 @@
 				StateTrieMigration: pallet_state_trie_migration = 1,
 
 				ParachainSystem: cumulus_pallet_parachain_system = 20,
-				ParachainInfo: parachain_info = 21,
+				ParachainInfo: staging_parachain_info = 21,
 
 				#[cfg(feature = "collator-selection")]
 				Authorship: pallet_authorship = 22,
modifiedruntime/common/ethereum/precompiles/utils/mod.rsdiffbeforeafterboth
--- a/runtime/common/ethereum/precompiles/utils/mod.rs
+++ b/runtime/common/ethereum/precompiles/utils/mod.rs
@@ -22,7 +22,7 @@
 
 mod data;
 
-pub use data::{Bytes, EvmData, EvmDataReader, EvmDataWriter};
+pub use data::{Bytes, EvmDataReader, EvmDataWriter};
 
 /// Alias for Result returning an EVM precompile error.
 pub type EvmResult<T = ()> = Result<T, PrecompileFailure>;
modifiedruntime/common/mod.rsdiffbeforeafterboth
--- a/runtime/common/mod.rs
+++ b/runtime/common/mod.rs
@@ -43,10 +43,7 @@
 use sp_version::NativeVersion;
 use up_common::types::{AccountId, BlockNumber};
 
-use crate::{
-	AllPalletsWithSystem, Aura, Balances, InherentDataExt, Runtime, RuntimeCall, Signature,
-	Treasury,
-};
+use crate::{AllPalletsWithSystem, Aura, Balances, Runtime, RuntimeCall, Signature, Treasury};
 
 #[macro_export]
 macro_rules! unsupported {
@@ -83,19 +80,17 @@
 		can_author_with: Default::default(),
 	}
 }
-
-pub type ChargeTransactionPayment = pallet_charge_transaction::ChargeTransactionPayment<Runtime>;
 
 pub type SignedExtra = (
 	frame_system::CheckSpecVersion<Runtime>,
 	frame_system::CheckTxVersion<Runtime>,
 	frame_system::CheckGenesis<Runtime>,
 	frame_system::CheckEra<Runtime>,
-	frame_system::CheckNonce<Runtime>,
+	pallet_charge_transaction::CheckNonce<Runtime>,
 	frame_system::CheckWeight<Runtime>,
 	maintenance::CheckMaintenance,
 	identity::DisableIdentityCalls,
-	ChargeTransactionPayment,
+	pallet_charge_transaction::ChargeTransactionPayment<Runtime>,
 	//pallet_contract_helpers::ContractHelpersExtension<Runtime>,
 	pallet_ethereum::FakeTransactionFinalizer<Runtime>,
 );
@@ -146,13 +141,17 @@
 	}
 }
 
+#[cfg(not(feature = "lookahead"))]
 pub(crate) struct CheckInherents;
 
+#[cfg(not(feature = "lookahead"))]
 impl cumulus_pallet_parachain_system::CheckInherents<Block> for CheckInherents {
 	fn check_inherents(
 		block: &Block,
 		relay_state_proof: &cumulus_pallet_parachain_system::RelayChainStateProof,
 	) -> sp_inherents::CheckInherentsResult {
+		use crate::InherentDataExt;
+
 		let relay_chain_slot = relay_state_proof
 			.read_slot()
 			.expect("Could not read the relay chain slot from the proof");
modifiedruntime/common/runtime_apis.rsdiffbeforeafterboth
--- a/runtime/common/runtime_apis.rs
+++ b/runtime/common/runtime_apis.rs
@@ -485,7 +485,14 @@
 
 			impl sp_consensus_aura::AuraApi<Block, AuraId> for Runtime {
 				fn slot_duration() -> sp_consensus_aura::SlotDuration {
-					sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration())
+					#[cfg(not(feature = "lookahead"))]
+					{
+						sp_consensus_aura::SlotDuration::from_millis(Aura::slot_duration())
+					}
+					#[cfg(feature = "lookahead")]
+					{
+						sp_consensus_aura::SlotDuration::from_millis(up_common::constants::SLOT_DURATION)
+					}
 				}
 
 				fn authorities() -> Vec<AuraId> {
modifiedruntime/common/tests/xcm.rsdiffbeforeafterboth
--- a/runtime/common/tests/xcm.rs
+++ b/runtime/common/tests/xcm.rs
@@ -37,10 +37,12 @@
 			Box::new(VersionedXcm::from(Xcm(vec![Transact {
 				origin_kind: OriginKind::Native,
 				require_weight_at_most: Weight::from_parts(1000, 1000),
-				call: RuntimeCall::Balances(pallet_balances::Call::<Runtime>::transfer {
-					dest: BOB.into(),
-					value: INITIAL_BALANCE / 2,
-				})
+				call: RuntimeCall::Balances(
+					pallet_balances::Call::<Runtime>::transfer_keep_alive {
+						dest: BOB.into(),
+						value: INITIAL_BALANCE / 2,
+					},
+				)
 				.encode()
 				.into(),
 			}]))),
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -61,6 +61,7 @@
 	'pallet-unique/runtime-benchmarks',
 	'pallet-utility/runtime-benchmarks',
 	'pallet-xcm/runtime-benchmarks',
+	'polkadot-runtime-common/runtime-benchmarks',
 	'sp-runtime/runtime-benchmarks',
 	'staging-xcm-builder/runtime-benchmarks',
 ]
@@ -126,7 +127,7 @@
 	'pallet-treasury/std',
 	'pallet-unique/std',
 	'pallet-utility/std',
-	'parachain-info/std',
+	'polkadot-runtime-common/std',
 	'serde',
 	'sp-api/std',
 	'sp-block-builder/std',
@@ -140,6 +141,7 @@
 	'sp-storage/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
 	'staging-xcm/std',
@@ -220,19 +222,20 @@
 	'pallet-unique/try-runtime',
 	'pallet-utility/try-runtime',
 	'pallet-xcm/try-runtime',
-	'parachain-info/try-runtime',
+	'polkadot-runtime-common/try-runtime',
+	'staging-parachain-info/try-runtime',
 ]
 
 app-promotion = []
 collator-selection = []
+fast-inflation = []
 foreign-assets = []
 gov-test-timings = []
 governance = []
-lookahead = []
+lookahead = ['cumulus-pallet-parachain-system/parameterized-consensus-hook', 'pallet-aura/experimental']
 preimage = []
 refungible = []
 session-test-timings = []
-fast-inflation = []
 
 ################################################################################
 # local dependencies
@@ -269,9 +272,9 @@
 pallet-treasury = { workspace = true }
 pallet-utility = { workspace = true }
 pallet-xcm = { workspace = true }
-parachain-info = { workspace = true }
 parity-scale-codec = { workspace = true }
 polkadot-parachain-primitives = { workspace = true }
+polkadot-runtime-common = { workspace = true }
 smallvec = { workspace = true }
 sp-api = { workspace = true }
 sp-arithmetic = { workspace = true }
@@ -287,6 +290,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
 staging-xcm-executor = { workspace = true }
modifiedruntime/opal/src/lib.rsdiffbeforeafterboth
--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -67,8 +67,15 @@
 
 impl_common_runtime_apis!();
 
+// CheckInherents is included in consensus hook
+#[cfg(not(feature = "lookahead"))]
 cumulus_pallet_parachain_system::register_validate_block!(
 	Runtime = Runtime,
 	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,
 	CheckInherents = CheckInherents,
 );
+#[cfg(feature = "lookahead")]
+cumulus_pallet_parachain_system::register_validate_block!(
+	Runtime = Runtime,
+	BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::<Runtime, Executive>,
+);
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -58,6 +58,7 @@
 	'pallet-unique/runtime-benchmarks',
 	'pallet-utility/runtime-benchmarks',
 	'pallet-xcm/runtime-benchmarks',
+	'polkadot-runtime-common/runtime-benchmarks',
 	'sp-runtime/runtime-benchmarks',
 	'staging-xcm-builder/runtime-benchmarks',
 ]
@@ -126,7 +127,7 @@
 	'pallet-treasury/std',
 	'pallet-unique/std',
 	'pallet-utility/std',
-	'parachain-info/std',
+	'polkadot-runtime-common/std',
 	'serde',
 	'sp-api/std',
 	'sp-block-builder/std',
@@ -139,6 +140,7 @@
 	'sp-std/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
 	'staging-xcm/std',
@@ -210,18 +212,19 @@
 	'pallet-unique/try-runtime',
 	'pallet-utility/try-runtime',
 	'pallet-xcm/try-runtime',
-	'parachain-info/try-runtime',
+	'polkadot-runtime-common/try-runtime',
+	'staging-parachain-info/try-runtime',
 ]
 
 app-promotion = []
 collator-selection = []
+fast-inflation = []
 foreign-assets = []
 gov-test-timings = []
 governance = []
 preimage = []
 refungible = []
 session-test-timings = []
-fast-inflation = []
 
 ################################################################################
 # local dependencies
@@ -257,9 +260,9 @@
 pallet-treasury = { workspace = true }
 pallet-utility = { workspace = true }
 pallet-xcm = { workspace = true }
-parachain-info = { workspace = true }
 parity-scale-codec = { workspace = true }
 polkadot-parachain-primitives = { workspace = true }
+polkadot-runtime-common = { workspace = true }
 smallvec = { workspace = true }
 sp-api = { workspace = true }
 sp-arithmetic = { workspace = true }
@@ -275,6 +278,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
 staging-xcm-executor = { workspace = true }
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -55,6 +55,7 @@
 	'pallet-unique/runtime-benchmarks',
 	'pallet-utility/runtime-benchmarks',
 	'pallet-xcm/runtime-benchmarks',
+	'polkadot-runtime-common/runtime-benchmarks',
 	'sp-runtime/runtime-benchmarks',
 	'staging-xcm-builder/runtime-benchmarks',
 	'up-data-structs/runtime-benchmarks',
@@ -124,7 +125,7 @@
 	'pallet-treasury/std',
 	'pallet-unique/std',
 	'pallet-utility/std',
-	'parachain-info/std',
+	'polkadot-runtime-common/std',
 	'sp-api/std',
 	'sp-block-builder/std',
 	'sp-core/std',
@@ -136,6 +137,7 @@
 	'sp-std/std',
 	'sp-transaction-pool/std',
 	'sp-version/std',
+	'staging-parachain-info/std',
 	'staging-xcm-builder/std',
 	'staging-xcm-executor/std',
 	'staging-xcm/std',
@@ -212,19 +214,20 @@
 	'pallet-unique/try-runtime',
 	'pallet-utility/try-runtime',
 	'pallet-xcm/try-runtime',
-	'parachain-info/try-runtime',
+	'polkadot-runtime-common/try-runtime',
+	'staging-parachain-info/try-runtime',
 ]
-unique-runtime = ['app-promotion', 'foreign-assets', 'refungible', 'governance', 'preimage']
+unique-runtime = ['app-promotion', 'foreign-assets', 'governance', 'preimage', 'refungible']
 
 app-promotion = []
 collator-selection = []
+fast-inflation = []
 foreign-assets = []
 gov-test-timings = []
 governance = []
 preimage = []
 refungible = []
 session-test-timings = []
-fast-inflation = []
 
 ################################################################################
 # local dependencies
@@ -260,9 +263,9 @@
 pallet-treasury = { workspace = true }
 pallet-utility = { workspace = true }
 pallet-xcm = { workspace = true }
-parachain-info = { workspace = true }
 parity-scale-codec = { workspace = true }
 polkadot-parachain-primitives = { workspace = true }
+polkadot-runtime-common = { workspace = true }
 smallvec = { workspace = true }
 sp-api = { workspace = true }
 sp-arithmetic = { workspace = true }
@@ -278,6 +281,7 @@
 sp-storage = { workspace = true }
 sp-transaction-pool = { workspace = true }
 sp-version = { workspace = true }
+staging-parachain-info = { workspace = true }
 staging-xcm = { workspace = true }
 staging-xcm-builder = { workspace = true }
 staging-xcm-executor = { workspace = true }