difftreelog
Merge pull request #1040 from UniqueNetwork/feature/update-polkadot-v1.3.0
in: master
Update polkadot to v1.3.0
70 files changed
Cargo.lockdiffbeforeafterboth1204 packageslockfile v3
Might be heavy and slow!
addr2line
0.19.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97depends onused byaddr2line
0.21.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cbdepends onused byadler
1.0.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35feused byaead
0.3.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331depends onused byaead
0.4.3crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877depends onaead
0.5.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0depends onused byaes
0.6.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561depends onused byaes
0.7.5crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8used byaes
0.8.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2depends onused byaes-gcm
0.9.4crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdf5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6used byaes-gcm
0.10.3crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1aes-soft
0.6.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072depends onused byaesni
0.10.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0cedepends onused byahash
0.7.6crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47used byahash
0.8.3crates.io↘ 4↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2faho-corasick
1.1.1crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518abdepends onallocator-api2
0.2.16crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5used byalways-assert
0.1.3crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4436e0292ab1bb631b42973c61205e704475fe8126af845c8d923c0996328127android_system_properties
0.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311depends onused byandroid-tzdata
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0used byansi_term
0.12.1crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2depends onanstream
0.6.4crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44depends onused byanstyle
1.0.4crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87anstyle-parse
0.2.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140depends onused byanstyle-query
1.0.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494bdepends onused byanstyle-wincon
3.0.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628depends onused byanyhow
1.0.75crates.io↘ 0↖ 22sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6used by- cumulus-client-consensus-proposer
0.1.0 - jsonrpsee-core
0.16.3 - jsonrpsee-types
0.16.3 - mmr-rpc
4.0.0-dev - netlink-packet-core
0.4.2 - netlink-packet-route
0.12.0 - netlink-packet-utils
0.5.2 - prost-derive
0.11.9 - sc-executor-wasmtime
0.10.0-dev - sp-wasm-interface
14.0.0 - tiny-bip39
1.0.0 - uc-rpc
0.1.4 - wasm-opt
0.114.1 - wasm-opt-cxx-sys
0.114.1 - wasm-opt-sys
0.114.1 - wasmtime
8.0.1 - wasmtime-cache
8.0.1 - wasmtime-cranelift
8.0.1 - wasmtime-cranelift-shared
8.0.1 - wasmtime-environ
8.0.1 - wasmtime-jit
8.0.1 - wasmtime-runtime
8.0.1
- cumulus-client-consensus-proposer
app-promotion-rpc
0.1.0workspace↘ 5↖ 5approx
0.5.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6depends onused byaquamarine
0.3.2crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdf752953c49ce90719c7bf1fc587bc8227aed04732ea0c0f85e5397d7fdbd1a1depends onarc-swap
1.6.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6ark-bls12-381
0.4.0crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488ark-ec
0.4.2crates.io↘ 9↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdefd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670badepends onark-ed-on-bls12-381-bandersnatch
0.4.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785cused byark-ff
0.4.2crates.io↘ 12↖ 13sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966badepends onark-ff-asm
0.4.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348depends onused byark-ff-macros
0.4.2crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565used byark-poly
0.4.2crates.io↘ 5↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bfark-scale
0.0.10crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum49b08346a3e38e2be792ef53ee168623c9244d968ff00cd70fb9932f6fe36393used byark-scale
0.0.11crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum51bd73bb6ddb72630987d37fa963e99196896c0d0ea81b7c894567e74a2f83afdepends onused byark-secret-scalar
0.0.2github.com/w3f/ring-vrf↘ 8↖ 1sourcegit+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1depends onused byark-serialize
0.4.2crates.io↘ 4↖ 13sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumadb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5ark-serialize-derive
0.4.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682eadepends onused byark-std
0.4.0crates.io↘ 2↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185depends onark-transcript
0.0.2github.com/w3f/ring-vrf↘ 6↖ 2sourcegit+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1array-bytes
6.1.0crates.io↘ 0↖ 14sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd9b1c5a481ec30a5abd8dfbd94ab5cf1bb4e9a66be7f1b3b322f2f1170c200fdused by- cumulus-relay-chain-minimal-node
0.1.0 - frame-benchmarking-cli
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - sc-cli
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sp-core
21.0.0
- cumulus-relay-chain-minimal-node
arrayref
0.3.7crates.io↘ 0↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545arrayvec
0.4.12crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9depends onused byarrayvec
0.5.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068bused byarrayvec
0.7.4crates.io↘ 0↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711asn1-rs
0.3.1crates.io↘ 8↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33depends onasn1-rs
0.5.2crates.io↘ 8↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0depends onasn1-rs-derive
0.1.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdb8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebfused byasn1-rs-derive
0.4.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6cused byasn1-rs-impl
0.1.0crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42eddepends onused byassert_matches
1.5.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b34d609dfbaf33d6889b2b7106d3ca345eacad44200913df5ba02bfd31d2ba9async-channel
1.9.0crates.io↘ 3↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35async-executor
1.5.4crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2c1da3ae8dabd9c00f453a329dfe1fb28da3c0a72e2478cdcd93171740c20499depends onused byasync-fs
1.6.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06used byasync-io
1.13.0crates.io↘ 12↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2afdepends onasync-lock
2.8.0crates.io↘ 1↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582bdepends onasync-net
1.8.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12fused byasync-process
1.7.0crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7a9d28b1d97e08915212e2e45310d47854eafa69600756fc735fb788f75199c9depends onused byasync-recursion
1.0.5crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0depends onasync-task
4.4.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb9441c6b2fe128a7c2bf680a44c34d0df31ce09e5b7e401fcca3faa483dbc921async-trait
0.1.73crates.io↘ 3↖ 58sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-consensus-proposer
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-api
1.0.0-dev - fc-consensus
2.0.0-dev - fc-db
2.0.0-dev - interceptor
0.8.2 - jsonrpsee-core
0.16.3 - jsonrpsee-http-client
0.16.3 - libp2p-request-response
0.24.1 - libp2p-webrtc
0.4.0-alpha.4 - orchestra
0.0.5 - polkadot-network-bridge
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-service
1.0.0 - rtp
0.6.8 - sc-authority-discovery
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-service
0.10.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-inherents
4.0.0-dev - sp-timestamp
4.0.0-dev - sp-transaction-storage-proof
4.0.0-dev - substrate-rpc-client
0.10.0-dev - trust-dns-proto
0.22.0 - try-runtime-cli
0.10.0-dev - turn
0.6.1 - webrtc
0.6.0 - webrtc-dtls
0.7.2 - webrtc-ice
0.9.1 - webrtc-sctp
0.7.0 - webrtc-srtp
0.9.1 - webrtc-util
0.7.0
- cumulus-client-consensus-aura
asynchronous-codec
0.6.2crates.io↘ 5↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568atomic-take
1.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3used byatomic-waker
1.1.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0used byatty
0.2.14crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8depends onauto_impl
1.1.0crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89used byautocfg
1.1.0crates.io↘ 0↖ 17sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fabacktrace
0.3.69crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837depends onbandersnatch_vrfs
0.0.1github.com/w3f/ring-vrf↘ 15↖ 1sourcegit+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1depends onused bybase-x
0.2.11crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270used bybase16ct
0.1.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678ccebase16ct
0.2.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cfbase64
0.13.1crates.io↘ 0↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8base64
0.21.4crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2base64ct
1.6.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5bbeef
0.5.2crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1depends onbinary-merkle-tree
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onbincode
1.3.3crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcaddepends onbindgen
0.65.1crates.io↘ 13↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5depends onused bybip39
2.0.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212fdepends onused bybitcoin_hashes
0.11.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4used bybitflags
1.3.2crates.io↘ 0↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718aused bybitflags
2.4.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635used bybitvec
1.0.1crates.io↘ 4↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9cdepends onused by- parity-scale-codec
3.6.5 - polkadot-collator-protocol
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-statement-distribution
1.0.0 - scale-info
2.9.0 - staging-kusama-runtime
1.0.0 - westend-runtime
1.0.0
- parity-scale-codec
blake2
0.10.6crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efedepends onblake2-rfc
0.2.18crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400depends onblake2b_simd
1.0.2crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780blake2s_simd
1.0.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756aeused byblake3
1.5.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87used byblock-buffer
0.7.3crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688bblock-buffer
0.9.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4depends onused byblock-buffer
0.10.4crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71depends onused byblock-modes
0.7.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0depends onused byblock-padding
0.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5depends onused byblock-padding
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2caeused byblocking
1.4.0crates.io↘ 8↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94c4ef1f913d78636d78d538eec1f18de81e481f44b1be0a81060090530846e1depends onbondrewd
0.1.14crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6d1660fac8d3acced44dac64453fafedf5aab2de196b932c727e63e4ae42d1ccdepends onbondrewd-derive
0.3.18crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum723da0dee1eef38edc021b0793f892bdc024500c6a5b0727a2efe16f0e0a6977depends onused bybounded-collections
0.1.8crates.io↘ 4↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeb5b05133427c07c4776906f673ccf36c21b102c9829c641a5b56bd151d44fd6bounded-vec
0.7.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum68534a48cbf63a4b1323c433cf21238c9ec23711e0df13b08c33e5c2082663cedepends onbs58
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3used bybs58
0.5.0crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf5353f36341f7451062466f0b755b96ac3a9547e4d7f6b70d603fc721a7d7896depends onbstr
1.6.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4c2f7349907b712260e64b0afe2f84692af14a454be26187d9df565c7f69266adepends onused bybuild-helper
0.1.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbdce191bf3fa4995ce948c8c83b4640a1745457a149e73c6db75b4ffe36aad5fdepends onbumpalo
3.14.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aecbyte-slice-cast
1.2.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc3ac9f8b63eca6fd385229b3675f6cc0dc5c8a5c8a54a59d4f52ffd670d87b0cused bybyte-tools
0.3.1crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7bytemuck
1.14.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6used bybyteorder
1.4.3crates.io↘ 0↖ 20sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610used by- block-buffer
0.7.3 - curve25519-dalek
2.1.3 - curve25519-dalek
3.2.0 - curve25519-dalek-ng
4.1.1 - fixed-hash
0.8.0 - fxhash
0.2.1 - merlin
2.0.1 - merlin
3.0.0 - multiaddr
0.17.1 - netlink-packet-core
0.4.2 - netlink-packet-route
0.12.0 - netlink-packet-utils
0.5.2 - quick-protobuf
0.8.1 - ruzstd
0.4.0 - sp-core-hashing
9.0.0 - thrift
0.15.0 - uint
0.9.5 - webrtc-dtls
0.7.2 - webrtc-media
0.5.1 - webrtc-srtp
0.9.1
- block-buffer
bytes
1.5.0crates.io↘ 0↖ 40sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223used by- asynchronous-codec
0.6.2 - cumulus-pallet-parachain-system
0.1.0 - ethereum
0.14.0 - h2
0.3.21 - http
0.2.9 - http-body
0.4.5 - hyper
0.14.27 - interceptor
0.8.2 - libp2p
0.51.3 - libp2p-kad
0.43.3 - libp2p-noise
0.42.2 - libp2p-quic
0.7.0-alpha.3 - libp2p-webrtc
0.4.0-alpha.4 - multistream-select
0.12.1 - netlink-proto
0.10.0 - netlink-sys
0.8.5 - parity-scale-codec
3.6.5 - polkadot-network-bridge
1.0.0 - prost
0.11.9 - prost-build
0.11.9 - quick-protobuf-codec
0.1.0 - quinn-proto
0.9.5 - rlp
0.5.2 - rtcp
0.7.2 - rtp
0.6.8 - sc-network
0.10.0-dev - sc-offchain
4.0.0-dev - soketto
0.7.1 - sp-io
23.0.0 - sp-runtime-interface
17.0.0 - tokio
1.32.0 - tokio-util
0.7.9 - tower-http
0.4.4 - unsigned-varint
0.7.2 - webrtc
0.6.0 - webrtc-data
0.6.0 - webrtc-media
0.5.1 - webrtc-sctp
0.7.0 - webrtc-srtp
0.9.1 - webrtc-util
0.7.0
- asynchronous-codec
bzip2-sys
0.1.11+1.0.8crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdcdepends onused bycamino
1.1.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9cdepends onused bycargo_metadata
0.15.4crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73acargo-platform
0.1.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479depends onused bycc
1.0.83crates.io↘ 2↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0depends onused by- backtrace
0.3.69 - blake3
1.5.0 - bzip2-sys
0.1.11+1.0.8 - cxx
1.0.107 - cxx-build
1.0.107 - errno-dragonfly
0.1.2 - iana-time-zone-haiku
0.1.2 - librocksdb-sys
0.11.0+8.1.1 - libz-sys
1.1.12 - link-cplusplus
1.0.9 - lz4-sys
1.9.4 - psm
0.1.21 - ring
0.16.20 - secp256k1-sys
0.6.1 - tikv-jemalloc-sys
0.5.4+5.3.0-patched - wasm-opt-sys
0.114.1 - wasmtime-runtime
8.0.1 - webrtc-util
0.7.0 - zstd-sys
2.0.8+zstd.1.5.5
- backtrace
ccm
0.3.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7depends onused bycexpr
0.6.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766depends onused bycfg_aliases
0.1.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89ecfg-expr
0.15.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3depends oncfg-if
1.0.0crates.io↘ 0↖ 57sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbaf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fdused by- aes
0.7.5 - aes
0.8.3 - ahash
0.8.3 - async-io
1.13.0 - async-process
1.7.0 - backtrace
0.3.69 - blake3
1.5.0 - chacha20
0.8.2 - chacha20
0.9.1 - ckb-merkle-mountain-range
0.5.2 - cpp_demangle
0.3.5 - crc32fast
1.3.2 - crossbeam-deque
0.8.3 - crossbeam-epoch
0.9.15 - crossbeam-queue
0.3.8 - crossbeam-utils
0.8.16 - curve25519-dalek
4.1.1 - directories-next
2.0.0 - filetime
0.2.22 - frame-metadata
16.0.0 - frame-system
4.0.0-dev - getrandom
0.1.16 - getrandom
0.2.10 - instant
0.1.12 - k256
0.13.1 - libloading
0.7.4 - md-5
0.10.6 - mockall
0.11.4 - mockall_derive
0.11.4 - nix
0.24.3 - parking_lot_core
0.8.6 - parking_lot_core
0.9.8 - polling
2.8.0 - polyval
0.5.3 - polyval
0.6.1 - prometheus
0.13.3 - sc-executor-wasmtime
0.10.0-dev - scale-info
2.9.0 - schnellru
0.2.1 - sha-1
0.9.8 - sha1
0.10.6 - sha2
0.9.9 - sha2
0.10.8 - tempfile
3.8.0 - thread_local
1.1.7 - tracing
0.1.37 - trust-dns-proto
0.22.0 - trust-dns-resolver
0.22.0 - twox-hash
1.6.3 - wasm-bindgen
0.2.87 - wasm-bindgen-futures
0.4.37 - wasmtime
8.0.1 - wasmtime-asm-macros
8.0.1 - wasmtime-jit
8.0.1 - wasmtime-jit-icache-coherence
8.0.1 - wasmtime-runtime
8.0.1 - winreg
0.50.0
- aes
chacha20
0.8.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6used bychacha20
0.9.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818depends onused bychacha20poly1305
0.9.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5used bychrono
0.4.31crates.io↘ 6↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38depends oncid
0.9.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143used bycipher
0.2.5crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801depends oncipher
0.3.0crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7depends oncipher
0.4.4crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3daddepends onckb-merkle-mountain-range
0.5.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum56ccb671c5921be8a84686e6212ca184cb1d7c51cadcdbfcbd1cc3f042f5dfb8depends onused byclang-sys
1.6.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6fdepends onused byclap
4.4.6crates.io↘ 2↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956depends onclap_builder
4.4.6crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45used byclap_derive
4.4.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873used byclap_lex
0.5.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961used bycoarsetime
0.1.28crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum99280f81a35511dda7d44f7c943491b41d3ac6fd0b54aea92498bec8612a2423codespan-reporting
0.11.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6edepends onused bycolorchoice
1.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumacbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7used bycomfy-table
7.0.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9ab77dbd8adecaf3f0db40581631b995f312a8a5ae3aa9993188bb8f23d83a5bcommon
0.1.0github.com/w3f/ring-proof↘ 7↖ 1sourcegit+https://github.com/w3f/ring-proof?rev=0e948f3#0e948f3c28cbacecdd3020403c4841c0eb339213used bycommon-path
1.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101used byconcurrent-queue
2.3.0crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400depends onconsole
0.15.7crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8used byconst-oid
0.9.5crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6fused byconst-random
0.1.15crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18eused byconst-random-macro
0.1.15crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddbused byconstant_time_eq
0.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbcused byconstant_time_eq
0.3.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2convert_case
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0eused bycore-foundation
0.9.3crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146depends oncore-foundation-sys
0.8.4crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efacore2
0.4.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505depends onused bycpp_demangle
0.3.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710fdepends onused bycpu-time
1.0.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume9e393a7668fe1fad3075085b86c781883000b4ede868f43627b34a87c8b7deddepends oncpufeatures
0.2.9crates.io↘ 1↖ 14sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1depends oncranelift-bforest
0.95.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70depends onused bycranelift-codegen
0.95.1crates.io↘ 12↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220depends oncranelift-codegen-meta
0.95.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9dadepends onused bycranelift-entity
0.95.1crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0depends oncranelift-frontend
0.95.1crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82dcranelift-isle
0.95.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469baused bycranelift-native
0.95.1crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00cranelift-wasm
0.95.1crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737acdepends onused bycrc
3.0.1crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfedepends oncrc-catalog
2.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9cace84e55f07e7301bae1c519df89cdad8cc3cd868413d3fdbdeca9ff3db484used bycrc32fast
1.3.2crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880ddepends oncrossbeam-deque
0.8.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cefused bycrossbeam-epoch
0.9.15crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7used bycrossbeam-queue
0.3.8crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353adddepends oncrossbeam-utils
0.8.16crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294depends oncrunchy
0.2.2crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7crypto-bigint
0.4.9crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17efcrypto-bigint
0.5.3crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum740fe28e594155f10cfc383984cbefd529d7396050557148f79cb0f621204124used bycrypto-common
0.1.6crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3crypto-mac
0.8.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeabdepends onused bycrypto-mac
0.11.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714depends onused byctr
0.8.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761eadepends onused byctr
0.9.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835depends onused bycumulus-client-cli
0.1.0github.com/paritytech/polkadot-sdk↘ 9↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-client-collator
0.1.0github.com/paritytech/polkadot-sdk↘ 16↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-primitives-core
0.1.0 - futures
0.3.28 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - sc-client-api
4.0.0-dev - sp-api
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - tracing
0.1.37
- cumulus-client-consensus-common
cumulus-client-consensus-aura
0.1.0github.com/paritytech/polkadot-sdk↘ 35↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-consensus-proposer
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-interface
0.1.0 - futures
0.3.28 - parity-scale-codec
3.6.5 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-telemetry
4.0.0-dev - schnellru
0.2.1 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-keystore
0.27.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-timestamp
4.0.0-dev - substrate-prometheus-endpoint
0.10.0-dev - tracing
0.1.37
used by- async-trait
cumulus-client-consensus-common
0.1.0github.com/paritytech/polkadot-sdk↘ 22↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - cumulus-client-pov-recovery
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-interface
0.1.0 - dyn-clone
1.0.14 - futures
0.3.28 - log
0.4.20 - parity-scale-codec
3.6.5 - polkadot-primitives
1.0.0 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-babe
0.10.0-dev - schnellru
0.2.1 - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-timestamp
4.0.0-dev - sp-trie
22.0.0 - substrate-prometheus-endpoint
0.10.0-dev - tracing
0.1.37
- async-trait
cumulus-client-consensus-proposer
0.1.0github.com/paritytech/polkadot-sdk↘ 8↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-client-network
0.1.0github.com/paritytech/polkadot-sdk↘ 16↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - cumulus-relay-chain-interface
0.1.0 - futures
0.3.28 - futures-timer
3.0.2 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - polkadot-node-primitives
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - sc-client-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - tracing
0.1.37
- async-trait
cumulus-client-pov-recovery
0.1.0github.com/paritytech/polkadot-sdk↘ 17↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-interface
0.1.0 - futures
0.3.28 - futures-timer
3.0.2 - parity-scale-codec
3.6.5 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - rand
0.8.5 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sp-consensus
0.10.0-dev - sp-maybe-compressed-blob
4.1.0-dev - sp-runtime
24.0.0 - tracing
0.1.37
- async-trait
cumulus-client-service
0.1.0github.com/paritytech/polkadot-sdk↘ 28↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- cumulus-client-cli
0.1.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - futures
0.3.28 - polkadot-primitives
1.0.0 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-network
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-rpc
4.0.0-dev - sc-service
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-utils
4.0.0-dev - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-transaction-pool
4.0.0-dev
used by- cumulus-client-cli
cumulus-pallet-aura-ext
0.1.0github.com/paritytech/polkadot-sdk↘ 11↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-pallet-dmp-queue
0.1.0github.com/paritytech/polkadot-sdk↘ 10↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-pallet-parachain-system
0.1.0github.com/paritytech/polkadot-sdk↘ 23↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- bytes
1.5.0 - cumulus-pallet-parachain-system-proc-macro
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - environmental
1.1.4 - frame-support
4.0.0-dev - frame-system
4.0.0-dev - impl-trait-for-tuples
0.2.2 - log
0.4.20 - parity-scale-codec
3.6.5 - polkadot-parachain-primitives
1.0.0 - scale-info
2.9.0 - sp-core
21.0.0 - sp-externalities
0.19.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-std
8.0.0 - sp-trie
22.0.0 - sp-version
22.0.0 - staging-xcm
1.0.0 - trie-db
0.27.1
- bytes
cumulus-pallet-parachain-system-proc-macro
0.1.0github.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7cumulus-pallet-xcm
0.1.0github.com/paritytech/polkadot-sdk↘ 9↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-pallet-xcmp-queue
0.1.0github.com/paritytech/polkadot-sdk↘ 14↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-primitives-aura
0.1.0github.com/paritytech/polkadot-sdk↘ 7↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-primitives-core
0.1.0github.com/paritytech/polkadot-sdk↘ 10↖ 24sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-primitives-timestamp
0.1.0 - cumulus-primitives-utility
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - opal-runtime
1.1.0 - orml-xtokens
0.4.1-dev - parachain-info
0.1.0 - quartz-runtime
1.1.0 - unique-node
1.1.0 - unique-runtime
1.1.0 - up-common
1.1.0
- cumulus-client-collator
cumulus-primitives-parachain-inherent
0.1.0github.com/paritytech/polkadot-sdk↘ 16↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - parity-scale-codec
3.6.5 - sc-client-api
4.0.0-dev - scale-info
2.9.0 - sp-api
4.0.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-std
8.0.0 - sp-storage
13.0.0 - sp-trie
22.0.0 - tracing
0.1.37
- async-trait
cumulus-primitives-timestamp
0.1.0github.com/paritytech/polkadot-sdk↘ 6↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-primitives-utility
0.1.0github.com/paritytech/polkadot-sdk↘ 11↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncumulus-relay-chain-inprocess-interface
0.1.0github.com/paritytech/polkadot-sdk↘ 17↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-interface
0.1.0 - futures
0.3.28 - futures-timer
3.0.2 - polkadot-cli
1.1.0 - polkadot-service
1.0.0 - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sp-api
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0
- async-trait
cumulus-relay-chain-interface
0.1.0github.com/paritytech/polkadot-sdk↘ 11↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - unique-node
1.1.0
- cumulus-client-consensus-aura
cumulus-relay-chain-minimal-node
0.1.0github.com/paritytech/polkadot-sdk↘ 28↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - async-trait
0.1.73 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - futures
0.3.28 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-core-primitives
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-service
0.10.0-dev - sc-tracing
4.0.0-dev - sc-utils
4.0.0-dev - schnellru
0.2.1 - sp-api
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-runtime
24.0.0 - tracing
0.1.37
- array-bytes
cumulus-relay-chain-rpc-interface
0.1.0github.com/paritytech/polkadot-sdk↘ 31↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-interface
0.1.0 - either
1.9.0 - futures
0.3.28 - futures-timer
3.0.2 - jsonrpsee
0.16.3 - parity-scale-codec
3.6.5 - pin-project
1.1.3 - polkadot-overseer
1.0.0 - rand
0.8.5 - sc-client-api
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-service
0.10.0-dev - schnellru
0.2.1 - serde
1.0.188 - serde_json
1.0.107 - smoldot
0.11.0 - smoldot-light
0.9.0 - sp-api
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-consensus-babe
0.10.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-storage
13.0.0 - thiserror
1.0.49 - tokio
1.32.0 - tokio-util
0.7.9 - tracing
0.1.37 - url
2.4.1
- async-trait
cumulus-test-relay-sproof-builder
0.1.0github.com/paritytech/polkadot-sdk↘ 7↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends oncurve25519-dalek
2.1.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4a9b85542f99a2dfa2a1b8e192662741c9859a846b296bef1c92ef9b58b5a216used bycurve25519-dalek
3.2.0crates.io↘ 5↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61curve25519-dalek
4.1.1crates.io↘ 9↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65cdepends oncurve25519-dalek-derive
0.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5bdepends onused bycurve25519-dalek-ng
4.1.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1c359b7249347e46fb28804470d071c921156ad62b3eef5d34e2ba867533dec8used bycxx
1.0.107crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbbe98ba1789d56fb3db3bee5e032774d4f421b685de7ba703643584ba24effbecxx-build
1.0.107crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc4ce20f6b8433da4841b1dadfb9468709868022d829d5ca1f2ffbda928455ea3depends oncxxbridge-flags
1.0.107crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum20888d9e1d2298e2ff473cee30efe7d5036e437857ab68bbfea84c74dba91da2used bycxxbridge-macro
1.0.107crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84depends onused bydarling
0.14.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850depends onused bydarling_core
0.14.4crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0darling_macro
0.14.4crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48edepends onused bydata-encoding
2.4.0crates.io↘ 0↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308data-encoding-macro
0.1.13crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc904b33cc60130e1aeea4956ab803d08a3f4a0ca82d64ed757afac3891f2bb99used bydata-encoding-macro-internal
0.1.11crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8fdf3fce3ce863539ec1d7fd1b6dcc3c645663376b43ed376bbf887733e4f772depends onused byder
0.6.1crates.io↘ 3↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4deder
0.7.8crates.io↘ 2↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1cdepends onder-parser
7.0.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82used byder-parser
8.2.0crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61ederanged
0.3.8crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946used byderivative
2.2.0crates.io↘ 3↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770bdepends onderive_builder
0.11.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3depends onused byderive_builder_core
0.11.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4used byderive_builder_macro
0.11.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68depends onused byderive_more
0.99.17crates.io↘ 5↖ 13sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321used by- polkadot-availability-distribution
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-runtime-parachains
1.0.0 - prioritized-metered-channel
0.2.0 - reed-solomon-novelpoly
1.0.2 - scale-info
2.9.0 - smoldot
0.11.0 - smoldot-light
0.9.0
- polkadot-availability-distribution
derive-syn-parse
0.1.5crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cddepends ondifflib
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8used bydigest
0.8.1crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5depends ondigest
0.9.0crates.io↘ 1↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066depends ondigest
0.10.7crates.io↘ 4↖ 22sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292used by- ark-ff
0.4.2 - ark-secret-scalar
0.0.2 - ark-serialize
0.4.2 - ark-transcript
0.0.2 - blake2
0.10.6 - curve25519-dalek
4.1.1 - ecdsa
0.16.8 - elliptic-curve
0.12.3 - elliptic-curve
0.13.5 - hmac
0.12.1 - md-5
0.10.6 - multihash
0.17.0 - pbkdf2
0.11.0 - pbkdf2
0.12.2 - ripemd
0.1.3 - sha1
0.10.6 - sha2
0.10.8 - sha3
0.10.8 - signature
1.6.4 - signature
2.1.0 - sp-core-hashing
9.0.0 - twox-hash
1.6.3
- ark-ff
directories
4.0.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210depends onused bydirectories-next
2.0.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbcdepends onused bydirs-sys
0.3.7crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6depends onused bydirs-sys-next
0.1.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4ddepends onused bydisplaydoc
0.2.4crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175ddepends ondleq_vrf
0.0.2github.com/w3f/ring-vrf↘ 10↖ 1sourcegit+https://github.com/w3f/ring-vrf?rev=3119f51#3119f51b54b69308abfb0671f6176cb125ae1bf1depends onused bydocify
0.2.4crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum76ee528c501ddd15d5181997e9518e59024844eac44fd1e40cb20ddb2a8562fadepends ondocify_macros
0.2.4crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0ca01728ab2679c464242eca99f94e2ce0514b52ac9ad950e2ed03fca991231cdepends onused bydowncast
0.11.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1used bydowncast-rs
1.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650used bydtoa
1.0.9crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653used bydyn-clonable
0.9.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4e9232f0e607a262ceb9bd5141a3dfb3e4db6994b31989bbfd845878cba59fd4depends onused bydyn-clonable-impl
0.9.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5depends onused bydyn-clone
1.0.14crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum23d2f3407d9a573d666de4b5bdf10569d73ca9478087346697dcbae6244bfbcdecdsa
0.14.8crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5cused byecdsa
0.16.8crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma4b1e0c257a9e9f25f90ff76d7a68360ed497ee519c8e428d1825ef0000799d4used byed25519
2.2.2crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum60f6d271ca33075c88028be6f04d502853d63a5ece419d269c15315d4fc1cf1ddepends oned25519-dalek
2.0.0crates.io↘ 6↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980ed25519-zebra
3.1.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7c24f403d068ad0b359e577a77f92392118be3f3c927538f2bb544a5ecd828c6used byed25519-zebra
4.0.3crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9depends onused byeither
1.9.0crates.io↘ 0↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07elliptic-curve
0.12.3crates.io↘ 14↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3depends onelliptic-curve
0.13.5crates.io↘ 11↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0bdepends onused byencode_unicode
0.3.6crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831fused byenum-as-inner
0.5.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116used byenumflags2
0.7.8crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939depends onenumflags2_derive
0.7.8crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246depends onused byenumn
0.1.12crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2bdepends onused byenv_logger
0.9.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7env_logger
0.10.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0used byenvironmental
1.1.4crates.io↘ 0↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume48c92028aaa870e83d51c64e5d4e0b6981b360c522198c23959f219a4e1b15bequivalent
1.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5used byerrno
0.3.4crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumadd4f07d43996f76ef320709726a556a9d4f965d9410d8d0271132d2f8293480errno-dragonfly
0.1.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bfdepends onused byethbloom
0.13.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60depends onused byethereum
0.14.0crates.io↘ 10↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6a89fb87a9e103f71b903b80b670200b54cc67a07578f070681f1fffb7396fb7depends onethereum-types
0.14.1crates.io↘ 8↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8eedepends onevent-listener
2.5.3crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0evm
0.39.1github.com/rust-blockchain/evm↘ 13↖ 4sourcegit+https://github.com/rust-blockchain/evm?rev=b7b82c7e1fc57b7449d6dfa6826600de37cc1e65#b7b82c7e1fc57b7449d6dfa6826600de37cc1e65depends onevm-coder
0.4.2crates.io↘ 5↖ 13sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb88ae5a449e7e9dfef59c0dd2df396bc56d81a6f4e297490c0c64aa73f7f7ad4depends onevm-coder-procedural
0.4.2crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6223c1063c1f53380b4b9aaf2e4d82eba4808c661c61265619b804b09b7a6b1aused byevm-coder-substrate-procedural
0.1.0workspace↘ 3↖ 1evm-core
0.39.0github.com/rust-blockchain/evm↘ 4↖ 4sourcegit+https://github.com/rust-blockchain/evm?rev=b7b82c7e1fc57b7449d6dfa6826600de37cc1e65#b7b82c7e1fc57b7449d6dfa6826600de37cc1e65evm-gasometer
0.39.0github.com/rust-blockchain/evm↘ 4↖ 1sourcegit+https://github.com/rust-blockchain/evm?rev=b7b82c7e1fc57b7449d6dfa6826600de37cc1e65#b7b82c7e1fc57b7449d6dfa6826600de37cc1e65used byevm-runtime
0.39.0github.com/rust-blockchain/evm↘ 5↖ 2sourcegit+https://github.com/rust-blockchain/evm?rev=b7b82c7e1fc57b7449d6dfa6826600de37cc1e65#b7b82c7e1fc57b7449d6dfa6826600de37cc1e65used byexit-future
0.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5depends onused byexpander
0.0.4crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma718c0675c555c5f976fff4ea9e2c150fa06cefa201cadef87cfbf9324075881used byexpander
0.0.6crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3774182a5df13c3d1690311ad32fbe913feef26baba609fa2dd5f72042bd2ab6used byexpander
2.0.0crates.io↘ 5↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7fallible-iterator
0.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7used byfastrand
1.9.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501bedepends onused byfastrand
2.0.1crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5fatality
0.0.6crates.io↘ 2↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2ad875162843b0d046276327afe0136e9ed3a23d5a754210fb6f1f33610d39abdepends onused by- polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-statement-distribution
1.0.0
- polkadot-availability-distribution
fatality-proc-macro
0.0.6crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf5aa1e3ae159e592ad222dc90c5acbad632b527779ba88486abe92782ab268bddepends onused byfc-api
1.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 5↖ 3sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8afc-consensus
2.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 9↖ 1sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onused byfc-db
2.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 14↖ 2sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onfc-mapping-sync
2.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 14↖ 2sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onfc-rpc
2.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 47↖ 1sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends on- ethereum
0.14.0 - ethereum-types
0.14.1 - evm
0.39.1 - fc-api
1.0.0-dev - fc-mapping-sync
2.0.0-dev - fc-rpc-core
1.1.0-dev - fc-storage
1.0.0-dev - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - fp-storage
2.0.0 - futures
0.3.28 - hex
0.4.3 - jsonrpsee
0.16.3 - libsecp256k1
0.7.1 - log
0.4.20 - pallet-evm
6.0.0-dev - parity-scale-codec
3.6.5 - prometheus
0.13.3 - rand
0.8.5 - rlp
0.5.2 - sc-client-api
4.0.0-dev - sc-consensus-aura
0.10.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-rpc
4.0.0-dev - sc-service
0.10.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - schnellru
0.2.1 - serde
1.0.188 - sp-api
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-storage
13.0.0 - sp-timestamp
4.0.0-dev - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49 - tokio
1.32.0
used by- ethereum
fc-rpc-core
1.1.0-devgithub.com/uniquenetwork/unique-frontier↘ 6↖ 2sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onfc-storage
1.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 11↖ 2sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onfdlimit
0.2.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1bdepends onused byff
0.12.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160depends onff
0.13.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449depends onfflonk
0.1.0github.com/w3f/fflonk↘ 6↖ 3sourcegit+https://github.com/w3f/fflonk#26a5045b24e169cffc1f9328ca83d71061145c40fiat-crypto
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd0870c84016d4b481be5c9f323c24f65e31e901ae618f0e80f4308fb00de1d2dused byfile-per-thread-logger
0.1.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866depends onused byfiletime
0.2.22crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0finality-grandpa
0.16.2crates.io↘ 8↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3depends onfixed-hash
0.8.0crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534fixedbitset
0.4.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80used byflate2
1.0.27crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010used byfloat-cmp
0.9.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4depends onused byfnv
1.0.7crates.io↘ 0↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1fork-tree
3.0.0github.com/paritytech/polkadot-sdk↘ 1↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onform_urlencoded
1.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652depends onused byfp-account
1.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 12↖ 1sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onused byfp-consensus
2.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 5↖ 3sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8afp-ethereum
1.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 6↖ 1sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onused byfp-evm
3.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 9↖ 12sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onfp-rpc
3.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 10↖ 10sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onfp-self-contained
1.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 5↖ 4sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8afp-storage
2.0.0github.com/uniquenetwork/unique-frontier↘ 2↖ 6sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onfragile
2.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaaused byframe-benchmarking
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 18↖ 76sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- frame-support
4.0.0-dev - frame-support-procedural
4.0.0-dev - frame-system
4.0.0-dev - linregress
0.5.3 - log
0.4.20 - parity-scale-codec
3.6.5 - paste
1.0.14 - scale-info
2.9.0 - serde
1.0.188 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-runtime-interface
17.0.0 - sp-std
8.0.0 - sp-storage
13.0.0 - static_assertions
1.1.0
used by- cumulus-pallet-xcmp-queue
0.1.0 - frame-benchmarking-cli
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - opal-runtime
1.1.0 - pallet-app-promotion
0.2.1 - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-migration
0.1.1 - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nonfungible
0.1.14 - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-metrics
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-executor
1.0.0 - uc-rpc
0.1.4 - unique-node
1.1.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- frame-support
frame-benchmarking-cli
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 41↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- Inflector
0.11.4 - array-bytes
6.1.0 - chrono
0.4.31 - clap
4.4.6 - comfy-table
7.0.1 - frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - gethostname
0.2.3 - handlebars
4.4.0 - itertools
0.10.5 - lazy_static
1.4.0 - linked-hash-map
0.5.6 - log
0.4.20 - parity-scale-codec
3.6.5 - rand
0.8.5 - rand_pcg
0.3.1 - sc-block-builder
0.10.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-executor
0.10.0-dev - sc-service
0.10.0-dev - sc-sysinfo
6.0.0-dev - serde
1.0.188 - serde_json
1.0.107 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-database
4.0.0-dev - sp-externalities
0.19.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-keystore
0.27.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-storage
13.0.0 - sp-trie
22.0.0 - sp-wasm-interface
14.0.0 - thiserror
1.0.49 - thousands
0.2.0
- Inflector
frame-election-provider-solution-type
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7frame-election-provider-support
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 11sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- pallet-bags-list
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-nomination-pools-benchmarking
1.0.0 - pallet-offences-benchmarking
4.0.0-dev - pallet-staking
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - staging-kusama-runtime
1.0.0 - westend-runtime
1.0.0
- pallet-bags-list
frame-executive
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onframe-metadata
16.0.0crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692frame-remote-externalities
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 15↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused byframe-support
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 33↖ 117sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- aquamarine
0.3.2 - bitflags
1.3.2 - docify
0.2.4 - environmental
1.1.4 - frame-metadata
16.0.0 - frame-support-procedural
4.0.0-dev - impl-trait-for-tuples
0.2.2 - k256
0.13.1 - log
0.4.20 - macro_magic
0.4.2 - parity-scale-codec
3.6.5 - paste
1.0.14 - scale-info
2.9.0 - serde
1.0.188 - serde_json
1.0.107 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-arithmetic
16.0.0 - sp-core
21.0.0 - sp-core-hashing-proc-macro
9.0.0 - sp-debug-derive
8.0.0 - sp-genesis-builder
0.1.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-metadata-ir
0.1.0 - sp-runtime
24.0.0 - sp-staking
4.0.0-dev - sp-state-machine
0.28.0 - sp-std
8.0.0 - sp-tracing
10.0.0 - sp-weights
20.0.0 - static_assertions
1.1.0 - tt-call
1.0.9
used by- cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-utility
0.1.0 - fp-ethereum
1.0.0-dev - fp-evm
3.0.0-dev - fp-self-contained
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-try-runtime
0.10.0-dev - kusama-runtime-constants
1.0.0 - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-transaction-payment
0.1.1 - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-gov-origins
0.2.1 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nonfungible
0.1.14 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parachain-info
0.1.0 - polkadot-parachain-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-constants
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - rococo-runtime-constants
1.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - up-common
1.1.0 - up-data-structs
0.2.2 - westend-runtime
1.0.0 - westend-runtime-constants
1.0.0
- aquamarine
frame-support-procedural
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onframe-support-procedural-tools
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 5↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onframe-support-procedural-tools-derive
3.0.0github.com/paritytech/polkadot-sdk↘ 3↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onframe-system
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 101sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-transaction-payment
0.1.1 - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-gov-origins
0.2.1 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nonfungible
0.1.14 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parachain-info
0.1.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-pallet-aura-ext
frame-system-benchmarking
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onframe-system-rpc-runtime-api
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 9sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onframe-try-runtime
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 5↖ 9sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7fs-err
2.9.0crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541fs2
0.4.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213depends onused byfs4
0.6.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47depends onused byfunty
2.0.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9cused byfutures
0.3.28crates.io↘ 7↖ 117sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40depends onused by- cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - cumulus-primitives-timestamp
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - exit-future
0.2.0 - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - finality-grandpa
0.16.2 - frame-remote-externalities
0.10.0-dev - if-watch
3.0.1 - libp2p
0.51.3 - libp2p-core
0.39.2 - libp2p-dns
0.39.0 - libp2p-identify
0.42.2 - libp2p-kad
0.43.3 - libp2p-mdns
0.43.1 - libp2p-noise
0.42.2 - libp2p-ping
0.42.0 - libp2p-quic
0.7.0-alpha.3 - libp2p-request-response
0.24.1 - libp2p-swarm
0.42.2 - libp2p-tcp
0.39.0 - libp2p-tls
0.1.0 - libp2p-wasm-ext
0.39.0 - libp2p-webrtc
0.4.0-alpha.4 - libp2p-websocket
0.41.0 - libp2p-yamux
0.43.1 - mick-jaeger
0.1.8 - mmr-gadget
4.0.0-dev - multistream-select
0.12.1 - netlink-proto
0.10.0 - netlink-sys
0.8.5 - orchestra
0.0.5 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-cli
1.1.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-api
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0 - prioritized-metered-channel
0.2.0 - rtnetlink
0.10.1 - rw-stream-sink
0.3.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-informant
0.10.0-dev - sc-network
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - soketto
0.7.1 - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - substrate-frame-rpc-system
4.0.0-dev - turn
0.6.1 - unique-node
1.1.0 - wasm-timer
0.2.5 - yamux
0.10.2
- cumulus-client-collator
futures-channel
0.3.28crates.io↘ 2↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2depends onfutures-core
0.3.28crates.io↘ 0↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8cfutures-executor
0.3.28crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0used byfutures-io
0.3.28crates.io↘ 0↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964futures-lite
1.13.0crates.io↘ 7↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bcedepends onfutures-macro
0.3.28crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72depends onused byfutures-rustls
0.22.2crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bddepends onfutures-sink
0.3.28crates.io↘ 0↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6efutures-task
0.3.28crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65futures-timer
3.0.2crates.io↘ 0↖ 47sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2cused by- cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-mapping-sync
2.0.0-dev - finality-grandpa
0.16.2 - jsonrpsee-core
0.16.3 - libp2p
0.51.3 - libp2p-core
0.39.2 - libp2p-identify
0.42.2 - libp2p-kad
0.43.3 - libp2p-ping
0.42.0 - libp2p-quic
0.7.0-alpha.3 - libp2p-swarm
0.42.2 - libp2p-tcp
0.39.0 - libp2p-webrtc
0.4.0-alpha.4 - orchestra
0.0.5 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-overseer
1.0.0 - polkadot-statement-distribution
1.0.0 - prioritized-metered-channel
0.2.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-informant
0.10.0-dev - sc-network
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-offchain
4.0.0-dev - sc-service
0.10.0-dev - sc-transaction-pool
4.0.0-dev - sc-utils
4.0.0-dev
- cumulus-client-network
futures-util
0.3.28crates.io↘ 10↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533depends onused by- asynchronous-codec
0.6.2 - futures
0.3.28 - futures-executor
0.3.28 - h2
0.3.21 - hyper
0.14.27 - hyper-rustls
0.24.1 - jsonrpsee-client-transport
0.16.3 - jsonrpsee-core
0.16.3 - jsonrpsee-server
0.16.3 - sc-rpc-spec-v2
0.10.0-dev - smoldot
0.11.0 - smoldot-light
0.9.0 - tower-http
0.4.4 - trust-dns-proto
0.22.0 - trust-dns-resolver
0.22.0 - unsigned-varint
0.7.2
- asynchronous-codec
fxhash
0.2.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50cdepends onused bygeneric-array
0.12.4crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bddepends onused bygeneric-array
0.14.7crates.io↘ 3↖ 20sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9agethostname
0.2.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862edepends ongetrandom
0.1.16crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fcegetrandom
0.2.10crates.io↘ 3↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427ghash
0.4.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99depends onused byghash
0.5.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40depends onused bygimli
0.27.3crates.io↘ 3↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2egimli
0.28.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0used byglob
0.3.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9bglobset
0.4.13crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13dused bygroup
0.12.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7depends onused bygroup
0.13.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63depends onused byh2
0.3.21crates.io↘ 11↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833depends onused byhandlebars
4.4.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc39b3bc2a8f715298032cf5087e58573809374b08160aa7d750582bdb82d2683hash-db
0.15.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd23bd4e7b5eda0d0f3a307e8b381fdc8ba9000f26fbe912250c0a4cc3956364aused byhash-db
0.16.0crates.io↘ 0↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e7d7786361d7425ae2fe4f9e407eb0efaa0840f5212d109cc018c40c35c6ab4hash256-std-hasher
0.15.2crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum92c171d55b98633f4ed3860808f004099b36c1cc29c42cfc53aa8591b21efcf2depends onhashbrown
0.12.3crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888depends onhashbrown
0.13.2crates.io↘ 1↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510edepends onhashbrown
0.14.1crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12heck
0.4.1crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8hermit-abi
0.1.19crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33depends onused byhermit-abi
0.3.3crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7hex
0.4.3crates.io↘ 0↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70hex-literal
0.4.1crates.io↘ 0↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46hkdf
0.12.3crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437depends onhmac
0.8.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840depends onused byhmac
0.11.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69bdepends onhmac
0.12.1crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5edepends onhmac-drbg
0.3.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1depends onused byhome
0.5.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddbdepends onused byhostname
0.3.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867depends onused byhttp
0.2.9crates.io↘ 3↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482depends onhttp-body
0.4.5crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1used byhttp-range-header
0.3.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumadd0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758fused byhttparse
1.8.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904used byhttpdate
1.0.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdf3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9used byhumantime
2.1.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4hyper
0.14.27crates.io↘ 16↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468depends onhyper-rustls
0.24.1crates.io↘ 9↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97depends oniana-time-zone
0.1.57crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613depends onused byiana-time-zone-haiku
0.1.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269fdepends onused byident_case
1.0.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39used byidna
0.2.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8used byidna
0.4.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917cused byif-addrs
0.7.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcbc0fa01ffc752e9dbc72818cdb072cd028b86be5e09dd04c5a643704fe101a9depends onused byif-watch
3.0.1crates.io↘ 11↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79fdepends onimpl-codec
0.6.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumba6a270039626615617f3f36d15fc827041df3b78c439da2cadfa47455a77f2fdepends onimpl-rlp
0.3.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf28220f89297a075ddc7245cd538076ee98b01f2a9c23a53a4f1105d5a322808depends onimpl-serde
0.4.0crates.io↘ 1↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cddepends onimpl-trait-for-tuples
0.2.2crates.io↘ 3↖ 23sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395ebdepends onused by- cumulus-pallet-parachain-system
0.1.0 - evm-coder
0.4.2 - frame-support
4.0.0-dev - opal-runtime
1.1.0 - orml-traits
0.4.1-dev - pallet-authorship
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-session
4.0.0-dev - pallet-treasury
4.0.0-dev - parity-scale-codec
3.6.5 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - sp-inherents
4.0.0-dev - sp-runtime
24.0.0 - sp-runtime-interface
17.0.0 - sp-staking
4.0.0-dev - sp-wasm-interface
14.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - unique-runtime
1.1.0 - up-sponsorship
0.1.0
- cumulus-pallet-parachain-system
include_dir
0.7.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19edepends onused byinclude_dir_macros
0.7.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3fdepends onused byindexmap
1.9.3crates.io↘ 3↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99depends onindexmap
2.0.2crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897depends onindexmap-nostd
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590used byindicatif
0.17.7crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25Inflector
0.11.4crates.io↘ 2↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3depends oninout
0.1.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5depends onused byinstant
0.1.12crates.io↘ 1↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2cdepends oninteger-encoding
3.0.4crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02used byinteger-sqrt
0.1.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum276ec31bcb4a9ee45f58bec6f9ec700ae4cf4f4f8f2fa7e06cb406bd5ffdd770depends onused byinterceptor
0.8.2crates.io↘ 11↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90bdepends onused byio-lifetimes
1.0.11crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumeae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2used byip_network
0.4.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaa2f047c0a98b2f299aa5d6d7088443570faae494e9ae1305e48be000c9e0eb1ipconfig
0.3.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997fused byipnet
2.8.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6is_executable
1.0.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8depends onused byis-terminal
0.4.9crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8bused byitertools
0.10.5crates.io↘ 1↖ 11sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473depends onitertools
0.11.0crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57depends onitoa
1.0.9crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaf150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38jobserver
0.1.26crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2depends onused byjs-sys
0.3.64crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935adepends onjsonrpsee
0.16.3crates.io↘ 7↖ 22sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78bdepends onused by- cumulus-relay-chain-rpc-interface
0.1.0 - fc-rpc
2.0.0-dev - fc-rpc-core
1.1.0-dev - frame-remote-externalities
0.10.0-dev - mmr-rpc
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - polkadot-rpc
1.0.0 - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-server
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - substrate-frame-rpc-system
4.0.0-dev - substrate-rpc-client
0.10.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0
- cumulus-relay-chain-rpc-interface
jsonrpsee-client-transport
0.16.3crates.io↘ 13↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7adepends onused byjsonrpsee-core
0.16.3crates.io↘ 20↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2b5dde66c53d6dcdc8caea1874a45632ec0fcf5b437789f1e45766a1512ce803depends onjsonrpsee-http-client
0.16.3crates.io↘ 11↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43depends onused byjsonrpsee-proc-macros
0.16.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892aused byjsonrpsee-server
0.16.3crates.io↘ 14↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcf4d945a6008c9b03db3354fb3c83ee02d2faa9f2e755ec1dfb69c3551b8f4badepends onused byjsonrpsee-types
0.16.3crates.io↘ 6↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum245ba8e5aa633dd1c1e4fae72bce06e71f42d34c14a2767c6b4d173b57bee5e5jsonrpsee-ws-client
0.16.3crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4e1b3975ed5d73f456478681a417128597acd6a2487855fdb7b4a3d4d195bf5eused byk256
0.13.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcadb76004ed8e97623117f3df85b17aaa6626ab0b0831e6573f104df16cd1bccused bykeccak
0.1.4crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940depends onkusama-runtime-constants
1.0.0github.com/paritytech/polkadot-sdk↘ 7↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bykvdb
0.13.0crates.io↘ 1↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume7d770dcb02bf6835887c3a979b5107a04ff4bbde97a5f0928d27404a155add9depends onkvdb-memorydb
0.13.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbf7a85fe66f9ff9cd74e169fdd2c94c6e1e74c412c99a73b4df3200b5d3760b2depends onused bykvdb-rocksdb
0.19.0crates.io↘ 6↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6landlock
0.2.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum520baa32708c4e957d2fc3a186bc5bd8d26637c33137f399ddfc202adb240068lazy_static
1.4.0crates.io↘ 0↖ 26sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646used by- Inflector
0.11.4 - bindgen
0.65.1 - console
0.15.7 - frame-benchmarking-cli
4.0.0-dev - mockall
0.11.4 - polkadot-node-jaeger
1.0.0 - prometheus
0.13.3 - prost-build
0.11.9 - sc-tracing
4.0.0-dev - sc-utils
4.0.0-dev - sharded-slab
0.1.6 - sp-consensus-beefy
4.0.0-dev - sp-core
21.0.0 - sp-keyring
24.0.0 - sp-panic-handler
8.0.0 - sp-trie
22.0.0 - spinners
4.1.0 - stun
0.4.4 - tracing-log
0.1.3 - tracing-subscriber
0.2.25 - trust-dns-proto
0.22.0 - trust-dns-resolver
0.22.0 - webrtc
0.6.0 - webrtc-util
0.7.0 - x509-parser
0.13.2 - x509-parser
0.14.0
- Inflector
lazycell
1.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55used bylibc
0.2.148crates.io↘ 0↖ 78sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369bused by- android_system_properties
0.1.5 - atty
0.2.14 - backtrace
0.3.69 - bzip2-sys
0.1.11+1.0.8 - cc
1.0.83 - clang-sys
1.6.1 - coarsetime
0.1.28 - console
0.15.7 - core-foundation
0.9.3 - cpu-time
1.0.0 - cpufeatures
0.2.9 - cranelift-native
0.95.1 - dirs-sys
0.3.7 - dirs-sys-next
0.1.2 - errno
0.3.4 - errno-dragonfly
0.1.2 - fdlimit
0.2.1 - filetime
0.2.22 - fs2
0.4.3 - gethostname
0.2.3 - getrandom
0.1.16 - getrandom
0.2.10 - hermit-abi
0.1.19 - hostname
0.3.1 - if-addrs
0.7.0 - io-lifetimes
1.0.11 - jobserver
0.1.26 - landlock
0.2.0 - libp2p-tcp
0.39.0 - librocksdb-sys
0.11.0+8.1.1 - lz4
1.24.0 - lz4-sys
1.9.4 - mach
0.3.2 - memmap2
0.5.10 - mio
0.8.8 - netlink-packet-core
0.4.2 - netlink-packet-route
0.12.0 - netlink-sys
0.8.5 - nix
0.24.3 - num_cpus
1.16.0 - parity-db
0.4.11 - parking_lot_core
0.8.6 - parking_lot_core
0.9.8 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polling
2.8.0 - rand
0.7.3 - rand
0.8.5 - ring
0.16.20 - rocksdb
0.21.0 - rpassword
7.2.0 - rtoolbox
0.0.1 - rustix
0.36.15 - rustix
0.37.24 - rustix
0.38.15 - sc-executor-wasmtime
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-tracing
4.0.0-dev - security-framework
2.9.2 - security-framework-sys
2.9.1 - signal-hook
0.3.17 - signal-hook-registry
1.4.1 - socket2
0.4.9 - socket2
0.5.4 - static_init
1.0.3 - system-configuration-sys
0.5.0 - tikv-jemalloc-ctl
0.5.4 - tikv-jemalloc-sys
0.5.4+5.3.0-patched - tokio
1.32.0 - wasm-opt
0.114.1 - wasmtime
8.0.1 - wasmtime-jit-icache-coherence
8.0.1 - wasmtime-runtime
8.0.1 - webrtc-util
0.7.0 - zstd-safe
5.0.2+zstd.1.5.2 - zstd-safe
6.0.6 - zstd-sys
2.0.8+zstd.1.5.5
- android_system_properties
libloading
0.7.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9fdepends onused bylibm
0.2.7crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4used bylibp2p
0.51.3crates.io↘ 26↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097depends on- bytes
1.5.0 - futures
0.3.28 - futures-timer
3.0.2 - getrandom
0.2.10 - instant
0.1.12 - libp2p-allow-block-list
0.1.1 - libp2p-connection-limits
0.1.0 - libp2p-core
0.39.2 - libp2p-dns
0.39.0 - libp2p-identify
0.42.2 - libp2p-identity
0.1.3 - libp2p-kad
0.43.3 - libp2p-mdns
0.43.1 - libp2p-metrics
0.12.0 - libp2p-noise
0.42.2 - libp2p-ping
0.42.0 - libp2p-quic
0.7.0-alpha.3 - libp2p-request-response
0.24.1 - libp2p-swarm
0.42.2 - libp2p-tcp
0.39.0 - libp2p-wasm-ext
0.39.0 - libp2p-webrtc
0.4.0-alpha.4 - libp2p-websocket
0.41.0 - libp2p-yamux
0.43.1 - multiaddr
0.17.1 - pin-project
1.1.3
- bytes
libp2p-allow-block-list
0.1.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50used bylibp2p-connection-limits
0.1.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0used bylibp2p-core
0.39.2crates.io↘ 20↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2depends onused by- libp2p
0.51.3 - libp2p-allow-block-list
0.1.1 - libp2p-connection-limits
0.1.0 - libp2p-dns
0.39.0 - libp2p-identify
0.42.2 - libp2p-kad
0.43.3 - libp2p-mdns
0.43.1 - libp2p-metrics
0.12.0 - libp2p-noise
0.42.2 - libp2p-ping
0.42.0 - libp2p-quic
0.7.0-alpha.3 - libp2p-request-response
0.24.1 - libp2p-swarm
0.42.2 - libp2p-tcp
0.39.0 - libp2p-tls
0.1.0 - libp2p-wasm-ext
0.39.0 - libp2p-webrtc
0.4.0-alpha.4 - libp2p-websocket
0.41.0 - libp2p-yamux
0.43.1
- libp2p
libp2p-dns
0.39.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554depends onused bylibp2p-identify
0.42.2crates.io↘ 14↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3cdepends onlibp2p-identity
0.1.3crates.io↘ 10↖ 18sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abccedepends onused by- libp2p
0.51.3 - libp2p-allow-block-list
0.1.1 - libp2p-connection-limits
0.1.0 - libp2p-core
0.39.2 - libp2p-identify
0.42.2 - libp2p-kad
0.43.3 - libp2p-mdns
0.43.1 - libp2p-noise
0.42.2 - libp2p-quic
0.7.0-alpha.3 - libp2p-request-response
0.24.1 - libp2p-swarm
0.42.2 - libp2p-tls
0.1.0 - libp2p-webrtc
0.4.0-alpha.4 - sc-cli
0.10.0-dev - sc-consensus
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-light
0.10.0-dev
- libp2p
libp2p-kad
0.43.3crates.io↘ 20↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ffdepends onlibp2p-mdns
0.43.1crates.io↘ 13↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460bdepends onused bylibp2p-metrics
0.12.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46depends onused bylibp2p-noise
0.42.2crates.io↘ 15↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5edepends onlibp2p-ping
0.42.0crates.io↘ 9↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202depends onlibp2p-quic
0.7.0-alpha.3crates.io↘ 14↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735depends onused bylibp2p-request-response
0.24.1crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5depends onused bylibp2p-swarm
0.42.2crates.io↘ 13↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296depends onlibp2p-swarm-derive
0.32.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4fdepends onused bylibp2p-tcp
0.39.0crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cfdepends onused bylibp2p-tls
0.1.0crates.io↘ 11↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781depends onused bylibp2p-wasm-ext
0.39.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43depends onused bylibp2p-webrtc
0.4.0-alpha.4crates.io↘ 23↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdba48592edbc2f60b4bc7c10d65445b0c3964c07df26fdf493b6880d33be36f8depends on- async-trait
0.1.73 - asynchronous-codec
0.6.2 - bytes
1.5.0 - futures
0.3.28 - futures-timer
3.0.2 - hex
0.4.3 - if-watch
3.0.1 - libp2p-core
0.39.2 - libp2p-identity
0.1.3 - libp2p-noise
0.42.2 - log
0.4.20 - multihash
0.17.0 - quick-protobuf
0.8.1 - quick-protobuf-codec
0.1.0 - rand
0.8.5 - rcgen
0.9.3 - serde
1.0.188 - stun
0.4.4 - thiserror
1.0.49 - tinytemplate
1.2.1 - tokio
1.32.0 - tokio-util
0.7.9 - webrtc
0.6.0
used by- async-trait
libp2p-websocket
0.41.0crates.io↘ 11↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9fdepends onused bylibp2p-yamux
0.43.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bdaused bylibrocksdb-sys
0.11.0+8.1.1crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3edepends onused bylibsecp256k1
0.7.1crates.io↘ 11↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum95b09eff1b35ed3b33b877ced3a691fc7a481919c7e29c53c906226fcf55e2a1depends onlibsecp256k1-core
0.3.0crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451depends onlibsecp256k1-gen-ecmult
0.3.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809depends onused bylibsecp256k1-gen-genmult
0.3.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7cdepends onused bylibz-sys
1.1.12crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7bdepends onlink-cplusplus
1.0.9crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9depends onused bylinked_hash_set
0.1.4crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588depends onused bylinked-hash-map
0.5.6crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770flinregress
0.5.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4de04dcecc58d366391f9920245b85ffa684558a5ef6e7736e754347c3aea9c2depends onused bylinux-raw-sys
0.1.4crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4used bylinux-raw-sys
0.3.8crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519used bylinux-raw-sys
0.4.8crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3852614a3bd9ca9804678ba6be5e3b8ce76dfc902cae004e3e0c44051b6e88dbused bylock_api
0.4.10crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16depends onlog
0.4.20crates.io↘ 0↖ 195sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8fused by- async-io
1.13.0 - binary-merkle-tree
4.0.0-dev - bounded-collections
0.1.8 - cranelift-codegen
0.95.1 - cranelift-frontend
0.95.1 - cranelift-wasm
0.95.1 - cumulus-client-consensus-common
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-utility
0.1.0 - env_logger
0.9.3 - env_logger
0.10.0 - evm
0.39.1 - fc-db
2.0.0-dev - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - file-per-thread-logger
0.1.6 - finality-grandpa
0.16.2 - fp-account
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-executive
4.0.0-dev - frame-remote-externalities
0.10.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - globset
0.4.13 - handlebars
4.4.0 - hyper-rustls
0.24.1 - if-watch
3.0.1 - interceptor
0.8.2 - libp2p-core
0.39.2 - libp2p-dns
0.39.0 - libp2p-identify
0.42.2 - libp2p-identity
0.1.3 - libp2p-kad
0.43.3 - libp2p-mdns
0.43.1 - libp2p-noise
0.42.2 - libp2p-ping
0.42.0 - libp2p-quic
0.7.0-alpha.3 - libp2p-swarm
0.42.2 - libp2p-tcp
0.39.0 - libp2p-webrtc
0.4.0-alpha.4 - libp2p-websocket
0.41.0 - libp2p-yamux
0.43.1 - mmr-gadget
4.0.0-dev - multiaddr
0.17.1 - multistream-select
0.12.1 - netlink-proto
0.10.0 - netlink-sys
0.8.5 - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-configuration
0.2.0 - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-evm
6.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-grandpa
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-staking-reward-fn
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-unique
0.2.1 - pallet-vesting
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parity-db
0.4.11 - polkadot-cli
1.1.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-performance-test
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - polling
2.8.0 - prost-build
0.11.9 - quartz-runtime
1.1.0 - regalloc2
0.6.1 - rococo-runtime
1.0.0 - rtnetlink
0.10.1 - rustls
0.19.1 - rustls
0.20.9 - rustls
0.21.7 - sc-allocator
4.1.0-dev - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-executor-wasmtime
0.10.0-dev - sc-informant
0.10.0-dev - sc-network
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-offchain
4.0.0-dev - sc-proposer-metrics
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-server
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-state-db
0.10.0-dev - sc-storage-monitor
0.1.0 - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - smoldot-light
0.9.0 - soketto
0.7.1 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-mmr-primitives
4.0.0-dev - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-wasm-interface
14.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - substrate-frame-rpc-system
4.0.0-dev - substrate-prometheus-endpoint
0.10.0-dev - substrate-rpc-client
0.10.0-dev - thrift
0.15.0 - tracing
0.1.37 - tracing-log
0.1.3 - trie-db
0.27.1 - try-runtime-cli
0.10.0-dev - turn
0.6.1 - unique-node
1.1.0 - unique-runtime
1.1.0 - wasm-bindgen-backend
0.2.87 - wasmtime
8.0.1 - wasmtime-cache
8.0.1 - wasmtime-cranelift
8.0.1 - wasmtime-environ
8.0.1 - wasmtime-jit
8.0.1 - wasmtime-runtime
8.0.1 - webrtc
0.6.0 - webrtc-data
0.6.0 - webrtc-dtls
0.7.2 - webrtc-ice
0.9.1 - webrtc-mdns
0.5.2 - webrtc-sctp
0.7.0 - webrtc-srtp
0.9.1 - webrtc-util
0.7.0 - westend-runtime
1.0.0 - yamux
0.10.2
- async-io
lru
0.10.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670depends onused bylru
0.11.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma4a83fb7698b3643a0e34f9ae6f2e8f0178c0fd42f8b59d493aa271ff3a5bf21used bylru-cache
0.1.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1cdepends onused bylz4
1.24.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1depends onused bylz4-sys
1.9.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900depends onused bymach
0.3.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afadepends onused bymacro_magic
0.4.2crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaee866bfee30d2d7e83835a4574aad5b45adba4cc807f2a3bbba974e5d4383c9macro_magic_core
0.4.2crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7e766a20fd9c72bab3e1e64ed63f36bd08410e75803813df210d1ce297d7ad00depends onmacro_magic_core_macros
0.4.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc12469fc165526520dff2807c2975310ab47cf7190a45b99b49a7dc8befab17bdepends onused bymacro_magic_macros
0.4.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb8fb85ec1620619edf2984a7693497d4ec88a9665d8b87e942856884c92dbf2aused bymaplit
1.0.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651dused bymatch_cfg
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4used bymatchers
0.0.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1depends onused bymatrixmultiply
0.3.8crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2depends onused bymd-5
0.10.6crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cfdepends onmemchr
2.6.4crates.io↘ 0↖ 15sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167memfd
0.6.4crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64depends onused bymemmap2
0.5.10crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327depends onmemoffset
0.6.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79cedepends onused bymemoffset
0.8.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1depends onused bymemoffset
0.9.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406cdepends onused bymemory-db
0.32.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum808b50db46293432a45e63bc15ea51e0ab4c0a1647b8eb114e31a3e698dd6fbedepends onused bymerlin
2.0.1crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4e261cf0f8b3c42ded9f7d2bb59dea03aa52bc8a1cbc7482f9fc3fd1229d3b42merlin
3.0.0crates.io↘ 4↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397dmick-jaeger
0.1.8crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum69672161530e8aeca1d1400fbf3f1a1747ff60ea604265a4e906c2442df20532depends onused byminimal-lexical
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79aused byminiz_oxide
0.7.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7depends onused bymio
0.8.8crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2used bymmr-gadget
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bymmr-rpc
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bymockall
0.11.4crates.io↘ 7↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96depends onmockall_derive
0.11.4crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbbused bymultiaddr
0.17.1crates.io↘ 11↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bddepends onmultibase
0.9.1crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404used bymultihash
0.17.0crates.io↘ 9↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40depends onmultihash-derive
0.8.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfc076939022111618a5026d3be019fd8b366e76314538ff9a1b59ffbcbf98bcddepends onused bymultimap
0.8.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6aused bymultistream-select
0.12.1crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27aused bynalgebra
0.32.3crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caadepends onused bynalgebra-macros
0.2.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998depends onused bynames
0.13.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146depends onused bynanorand
0.7.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3netlink-packet-core
0.4.2crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum345b8ab5bd4e71a2986663e88c56856699d060e78e152e6e9d7966fcd5491297netlink-packet-route
0.12.0crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaabdepends onused bynetlink-packet-utils
0.5.2crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0ede8a08c71ad5a95cdd0e4e52facd37190977039a4704eb82a283f713747d34netlink-proto
0.10.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6depends onused bynetlink-sys
0.8.5crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411used bynix
0.24.3crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069no-std-net
0.6.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65nodrop
0.1.14crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bbused bynohash-hasher
0.2.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451used bynom
7.1.3crates.io↘ 2↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4adepends onnormalize-line-endings
0.3.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5beused bynum_cpus
1.16.0crates.io↘ 2↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43depends onnum_enum
0.7.0crates.io↘ 1↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum70bf6736f74634d299d00086f02986875b3c2d924781a6a2cb6c201e73da0cebdepends onnum_enum_derive
0.7.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum56ea360eafe1022f7cc56cd7b869ed57330fb2453d0c7831d99b74c65d2f5597used bynum-bigint
0.4.4crates.io↘ 3↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0num-complex
0.4.4crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214depends onused bynum-format
0.4.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3depends onused bynum-integer
0.1.45crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9depends onnum-rational
0.4.1crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0num-traits
0.2.16crates.io↘ 1↖ 25sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2depends onused by- approx
0.5.1 - ark-ec
0.4.2 - ark-ff
0.4.2 - ark-ff-macros
0.4.2 - ark-std
0.4.0 - asn1-rs
0.3.1 - asn1-rs
0.5.2 - chrono
0.4.31 - der-parser
7.0.0 - der-parser
8.2.0 - finality-grandpa
0.16.2 - float-cmp
0.9.0 - integer-sqrt
0.1.5 - nalgebra
0.32.3 - num-bigint
0.4.4 - num-complex
0.4.4 - num-integer
0.1.45 - num-rational
0.4.1 - ordered-float
1.1.1 - orml-traits
0.4.1-dev - sc-consensus-babe
0.10.0-dev - simba
0.8.1 - smoldot
0.11.0 - sp-arithmetic
16.0.0 - wasmi_core
0.13.0
- approx
number_prefix
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3used byobject
0.30.4crates.io↘ 4↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385object
0.32.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0depends onused byoid-registry
0.4.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2adepends onused byoid-registry
0.6.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bffdepends onused byonce_cell
1.18.0crates.io↘ 0↖ 20sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576dused by- ahash
0.7.6 - ahash
0.8.3 - coarsetime
0.1.28 - const-random-macro
0.1.15 - cxx-build
1.0.107 - docify_macros
0.2.4 - k256
0.13.1 - libp2p-core
0.39.2 - libp2p-noise
0.42.2 - pest_meta
2.7.4 - proc-macro-crate
1.3.1 - ring
0.16.20 - sc-offchain
4.0.0-dev - thread_local
1.1.7 - tiny-bip39
1.0.0 - tracing-core
0.1.31 - wasm-bindgen-backend
0.2.87 - wasmtime
8.0.1 - wasmtime-jit-debug
8.0.1 - which
4.4.2
- ahash
opal-runtime
1.1.0workspace↘ 105↖ 2depends on- app-promotion-rpc
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-timestamp
0.1.0 - cumulus-primitives-utility
0.1.0 - derivative
2.2.0 - evm-coder
0.4.2 - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - fp-self-contained
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - hex-literal
0.4.1 - impl-trait-for-tuples
0.2.2 - log
0.4.20 - num_enum
0.7.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-democracy
4.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-precompile-simple
2.0.0-dev - pallet-evm-transaction-payment
0.1.1 - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-gov-origins
0.2.1 - pallet-identity
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-nonfungible
0.1.14 - pallet-preimage
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-xcm
1.0.0 - parachain-info
0.1.0 - parity-scale-codec
3.6.5 - polkadot-parachain-primitives
1.0.0 - precompile-utils-macro
0.1.0 - scale-info
2.9.0 - serde
1.0.188 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-arithmetic
16.0.0 - sp-block-builder
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-std
8.0.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - substrate-wasm-builder
5.0.0-dev - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - up-sponsorship
0.1.0
used by- app-promotion-rpc
opaque-debug
0.2.3crates.io↘ 0↖ 2opaque-debug
0.3.0crates.io↘ 0↖ 11sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5openssl-probe
0.1.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cfused byorchestra
0.0.5crates.io↘ 9↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum227585216d05ba65c7ab0a0450a3cf2cbd81a98862a54c4df8e14d5ac6adb015depends onorchestra-proc-macro
0.0.5crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2871aadd82a2c216ee68a69837a526dfe788ecbe74c4c5038a6acdbff6653066depends onused byordered-float
1.1.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3305af35278dd29f46fcdd139e0b1fbfae2153f0e5928b39b035542dd31e37b7depends onused byorml-tokens
0.4.1-devgithub.com/open-web3-stack/open-runtime-module-library↘ 10↖ 4sourcegit+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4depends onorml-traits
0.4.1-devgithub.com/open-web3-stack/open-runtime-module-library↘ 13↖ 6sourcegit+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4depends onorml-utilities
0.4.1-devgithub.com/open-web3-stack/open-runtime-module-library↘ 8↖ 1sourcegit+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4depends onused byorml-vesting
0.4.1-devgithub.com/open-web3-stack/open-runtime-module-library↘ 8↖ 3sourcegit+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4depends onorml-xcm-support
0.4.1-devgithub.com/open-web3-stack/open-runtime-module-library↘ 7↖ 4sourcegit+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4depends onorml-xtokens
0.4.1-devgithub.com/open-web3-stack/open-runtime-module-library↘ 15↖ 3sourcegit+https://github.com/open-web3-stack/open-runtime-module-library?branch=polkadot-v1.1.0#b3694e631df7f1ca16b1973122937753fcdee9d4depends onp256
0.11.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594used byp384
0.11.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aaused bypallet-app-promotion
0.2.1workspace↘ 16↖ 3depends on- frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-evm
6.0.0-dev - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-unique
0.2.1 - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-std
8.0.0 - up-data-structs
0.2.2
- frame-benchmarking
pallet-aura
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-authority-discovery
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-authorship
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 7↖ 15sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- opal-runtime
1.1.0 - pallet-babe
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-grandpa
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-staking
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- opal-runtime
pallet-babe
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 17↖ 8sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-authorship
4.0.0-dev - pallet-session
4.0.0-dev - pallet-timestamp
4.0.0-dev - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-application-crypto
23.0.0 - sp-consensus-babe
0.10.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0
- frame-benchmarking
pallet-bags-list
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 15↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-balances
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 21sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- opal-runtime
1.1.0 - pallet-bags-list
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-collator-selection
5.0.0 - pallet-foreign-assets
0.1.0 - pallet-identity
4.0.0-dev - pallet-inflation
0.1.1 - pallet-nomination-pools
1.0.0 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-treasury
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- opal-runtime
pallet-balances-adapter
0.1.0workspace↘ 15↖ 5depends on- evm-coder
0.4.2 - frame-support
4.0.0-dev - frame-system
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-common
0.1.14 - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-transaction-payment
0.1.1 - pallet-structure
0.1.2 - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-std
8.0.0 - up-data-structs
0.2.2
- evm-coder
pallet-base-fee
1.0.0github.com/uniquenetwork/unique-frontier↘ 7↖ 3sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onpallet-beefy
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 13↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-beefy-mmr
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 18↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - binary-merkle-tree
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-beefy
4.0.0-dev - pallet-mmr
4.0.0-dev - pallet-session
4.0.0-dev - parity-scale-codec
3.6.5 - scale-info
2.9.0 - serde
1.0.188 - sp-api
4.0.0-dev - sp-consensus-beefy
4.0.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-std
8.0.0
- array-bytes
pallet-bounties
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-child-bounties
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-collator-selection
5.0.0workspace↘ 20↖ 3depends on- frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-aura
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-session
4.0.0-dev - pallet-timestamp
4.0.0-dev - parity-scale-codec
3.6.5 - rand
0.8.5 - scale-info
2.9.0 - serde
1.0.188 - sp-consensus-aura
0.10.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-staking
4.0.0-dev - sp-std
8.0.0 - sp-tracing
10.0.0
- frame-benchmarking
pallet-collective
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-common
0.1.14workspace↘ 16↖ 14depends on- bondrewd
0.1.14 - ethereum
0.14.0 - evm-coder
0.4.2 - frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-std
8.0.0 - sp-weights
20.0.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0
used by- bondrewd
pallet-configuration
0.2.0workspace↘ 16↖ 4depends onpallet-conviction-voting
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-democracy
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-election-provider-multi-phase
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 16↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-election-provider-support-benchmarking
4.0.0-dev - parity-scale-codec
3.6.5 - rand
0.8.5 - scale-info
2.9.0 - sp-arithmetic
16.0.0 - sp-core
21.0.0 - sp-io
23.0.0 - sp-npos-elections
4.0.0-dev - sp-runtime
24.0.0 - sp-std
8.0.0 - strum
0.24.1
- frame-benchmarking
pallet-election-provider-support-benchmarking
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 7↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-elections-phragmen
5.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-ethereum
4.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 16↖ 4sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onpallet-evm
6.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 20↖ 23sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends on- environmental
1.1.4 - evm
0.39.1 - fp-account
1.0.0-dev - fp-evm
3.0.0-dev - frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - hash-db
0.16.0 - hex
0.4.3 - hex-literal
0.4.1 - impl-trait-for-tuples
0.2.2 - log
0.4.20 - parity-scale-codec
3.6.5 - rlp
0.5.2 - scale-info
2.9.0 - serde
1.0.188 - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-std
8.0.0
used by- app-promotion-rpc
0.1.0 - fc-rpc
2.0.0-dev - opal-runtime
1.1.0 - pallet-app-promotion
0.2.1 - pallet-balances-adapter
0.1.0 - pallet-common
0.1.14 - pallet-ethereum
4.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-transaction-payment
0.1.1 - pallet-fungible
0.1.11 - pallet-nonfungible
0.1.14 - pallet-refungible
0.2.13 - pallet-structure
0.1.2 - pallet-unique
0.2.1 - quartz-runtime
1.1.0 - tests
0.1.1 - uc-rpc
0.1.4 - unique-runtime
1.1.0 - up-common
1.1.0 - up-data-structs
0.2.2 - up-rpc
0.1.3
- environmental
pallet-evm-coder-substrate
0.1.3workspace↘ 14↖ 11depends onpallet-evm-contract-helpers
0.3.0workspace↘ 13↖ 4depends onpallet-evm-migration
0.1.1workspace↘ 10↖ 4pallet-evm-precompile-simple
2.0.0-devgithub.com/uniquenetwork/unique-frontier↘ 3↖ 3sourcegit+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v1.1.0#e99be6383ce0b0bc33768e479505cf4302dc0f8adepends onpallet-evm-transaction-payment
0.1.1workspace↘ 10↖ 5depends onpallet-fast-unstake
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-foreign-assets
0.1.0workspace↘ 16↖ 3depends on- frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - orml-tokens
0.4.1-dev - pallet-balances
4.0.0-dev - pallet-common
0.1.14 - pallet-fungible
0.1.11 - parity-scale-codec
3.6.5 - scale-info
2.9.0 - serde
1.0.188 - sp-runtime
24.0.0 - sp-std
8.0.0 - staging-xcm
1.0.0 - staging-xcm-executor
1.0.0 - up-data-structs
0.2.2
- frame-benchmarking
pallet-fungible
0.1.11workspace↘ 14↖ 5depends onpallet-gov-origins
0.2.1workspace↘ 4↖ 3pallet-grandpa
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 16↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-authorship
4.0.0-dev - pallet-session
4.0.0-dev - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-application-crypto
23.0.0 - sp-consensus-grandpa
4.0.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0
- frame-benchmarking
pallet-identity
4.0.0-devworkspace↘ 11↖ 0pallet-identity
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-im-online
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 13↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-indices
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-maintenance
0.1.0workspace↘ 8↖ 3pallet-membership
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-message-queue
7.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-mmr
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-multisig
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-nis
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-nomination-pools
1.0.0github.com/paritytech/polkadot-sdk↘ 12↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-nomination-pools-benchmarking
1.0.0github.com/paritytech/polkadot-sdk↘ 13↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-nomination-pools-runtime-api
1.0.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7pallet-nonfungible
0.1.14workspace↘ 15↖ 5depends onpallet-offences
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-offences-benchmarking
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 17↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-babe
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-offences
4.0.0-dev - pallet-session
4.0.0-dev - pallet-staking
4.0.0-dev - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-runtime
24.0.0 - sp-staking
4.0.0-dev - sp-std
8.0.0
- frame-benchmarking
pallet-preimage
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-proxy
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-ranked-collective
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-recovery
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-referenda
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-refungible
0.2.13workspace↘ 14↖ 5depends onpallet-scheduler
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-session
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 15↖ 18sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- opal-runtime
1.1.0 - pallet-authority-discovery
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-grandpa
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-staking
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- opal-runtime
pallet-session-benchmarking
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-society
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-staking
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 16↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-authorship
4.0.0-dev - pallet-session
4.0.0-dev - parity-scale-codec
3.6.5 - rand_chacha
0.2.2 - scale-info
2.9.0 - serde
1.0.188 - sp-application-crypto
23.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-staking
4.0.0-dev - sp-std
8.0.0
- frame-benchmarking
pallet-staking-reward-curve
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7pallet-staking-reward-fn
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypallet-staking-runtime-api
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-state-trie-migration
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-structure
0.1.2workspace↘ 11↖ 9depends onpallet-sudo
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-template-transaction-payment
3.0.0github.com/uniquenetwork/pallet-sponsoring↘ 13↖ 3sourcegit+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v1.1.0#2fbec92640f517e4812be7ed61ef7691af6e0bbadepends onpallet-test-utils
0.1.0workspace↘ 6↖ 3pallet-timestamp
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 15sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-pallet-aura-ext
0.1.0 - opal-runtime
1.1.0 - pallet-aura
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-session
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-pallet-aura-ext
pallet-tips
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-transaction-payment
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 13sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- opal-runtime
1.1.0 - pallet-template-transaction-payment
3.0.0 - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- opal-runtime
pallet-transaction-payment-rpc
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-transaction-payment-rpc-runtime-api
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 5↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-treasury
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 11sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-unique
0.2.1workspace↘ 21↖ 5depends on- ethereum
0.14.0 - evm-coder
0.4.2 - frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - log
0.4.20 - pallet-balances-adapter
0.1.0 - pallet-common
0.1.14 - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-nonfungible
0.1.14 - pallet-refungible
0.2.13 - pallet-structure
0.1.2 - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-std
8.0.0 - up-common
1.1.0 - up-data-structs
0.2.2
- ethereum
pallet-utility
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-vesting
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-whitelist
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-xcm
1.0.0github.com/paritytech/polkadot-sdk↘ 14↖ 9sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpallet-xcm-benchmarks
1.0.0github.com/paritytech/polkadot-sdk↘ 12↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onparachain-info
0.1.0github.com/paritytech/polkadot-sdk↘ 7↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onparity-db
0.4.11crates.io↘ 12↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumab512a34b3c2c5e465731cc7668edf79208bbe520be03484eeb05e63ed221735depends onparity-scale-codec
3.6.5crates.io↘ 7↖ 252sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fbdepends onused by- app-promotion-rpc
0.1.0 - ark-scale
0.0.10 - ark-scale
0.0.11 - bounded-collections
0.1.8 - cumulus-client-cli
0.1.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-primitives-timestamp
0.1.0 - cumulus-primitives-utility
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - ethereum
0.14.0 - evm
0.39.1 - evm-core
0.39.0 - fc-api
1.0.0-dev - fc-db
2.0.0-dev - fc-rpc
2.0.0-dev - fc-storage
1.0.0-dev - finality-grandpa
0.16.2 - fork-tree
3.0.0 - fp-account
1.0.0-dev - fp-consensus
2.0.0-dev - fp-ethereum
1.0.0-dev - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - fp-self-contained
1.0.0-dev - fp-storage
2.0.0 - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-metadata
16.0.0 - frame-remote-externalities
0.10.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - impl-codec
0.6.0 - mmr-gadget
4.0.0-dev - mmr-rpc
4.0.0-dev - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-transaction-payment
0.1.1 - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-gov-origins
0.2.1 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nomination-pools-runtime-api
1.0.0-dev - pallet-nonfungible
0.1.14 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-staking-runtime-api
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parachain-info
0.1.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-core-primitives
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-erasure-coding
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-metrics
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0 - polkadot-statement-table
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-epochs
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-executor
0.10.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-state-db
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - scale-info
2.9.0 - slot-range-helper
1.0.0 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-authority-discovery
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-externalities
0.19.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-keystore
0.27.0 - sp-metadata-ir
0.1.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-runtime
24.0.0 - sp-runtime-interface
17.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-state-machine
0.28.0 - sp-statement-store
4.0.0-dev - sp-storage
13.0.0 - sp-timestamp
4.0.0-dev - sp-tracing
10.0.0 - sp-transaction-storage-proof
4.0.0-dev - sp-trie
22.0.0 - sp-version
22.0.0 - sp-version-proc-macro
8.0.0 - sp-wasm-interface
14.0.0 - sp-weights
20.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - substrate-frame-rpc-system
4.0.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev - tests
0.1.1 - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0 - unique-runtime
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - westend-runtime
1.0.0
- app-promotion-rpc
parity-scale-codec-derive
3.6.5crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260used byparity-send-wrapper
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaa9777aa91b8ad9dd5aaa04a9b6bcb02c7f1deb952fca5a66034d5e63afc5c6fused byparity-wasm
0.45.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume1ad0aff30c1da14b1254fcb2af73e1fa9a28670e584a626f53a369d0e157304parking
2.1.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067parking_lot
0.11.2crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99parking_lot
0.12.1crates.io↘ 2↖ 47sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228fdepends onused by- cumulus-client-collator
0.1.0 - cumulus-client-network
0.1.0 - fc-db
2.0.0-dev - fc-mapping-sync
2.0.0-dev - finality-grandpa
0.16.2 - jsonrpsee-core
0.16.3 - kvdb-memorydb
0.13.0 - kvdb-rocksdb
0.19.0 - libp2p-core
0.39.2 - libp2p-dns
0.39.0 - libp2p-quic
0.7.0-alpha.3 - libp2p-websocket
0.41.0 - parity-db
0.4.11 - polkadot-network-bridge
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-overseer
1.0.0 - prometheus
0.13.3 - prometheus-client
0.19.0 - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-executor
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-state-db
0.10.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-utils
4.0.0-dev - smoldot-light
0.9.0 - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-database
4.0.0-dev - sp-keystore
0.27.0 - sp-state-machine
0.28.0 - sp-trie
22.0.0 - tokio
1.32.0 - trust-dns-resolver
0.22.0 - yamux
0.10.2
- cumulus-client-collator
parking_lot_core
0.8.6crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dcparking_lot_core
0.9.8crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447used bypartial_sort
0.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156used bypaste
1.0.14crates.io↘ 0↖ 13sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumde3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4cpbkdf2
0.8.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffadepends onused bypbkdf2
0.11.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917depends onused bypbkdf2
0.12.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2depends onused bypeeking_take_while
0.1.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099used bypem
1.1.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8depends onused bypem-rfc7468
0.6.0crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adacdepends onused bypercent-encoding
2.3.0crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94pest
2.7.4crates.io↘ 3↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc022f1e7b65d6a24c0dbbd5fb344c66881bc01f3e5ae74a1c8100f2f985d98a4depends onpest_derive
2.7.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum35513f630d46400a977c4cb58f78e1bfbe01434316e60c37d27b9ad6139c66d8depends onused bypest_generator
2.7.4crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbc9fc1b9e7057baba189b5c626e2d6f40681ae5b6eb064dc7c7834101ec8123aused bypest_meta
2.7.4crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1df74e9e7ec4053ceb980e7c0c8bd3594e977fde1af91daba9c928e8e8c6708ddepends onused bypetgraph
0.6.4crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9depends onpin-project
1.1.3crates.io↘ 1↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422depends onused by- cumulus-relay-chain-rpc-interface
0.1.0 - jsonrpsee-client-transport
0.16.3 - libp2p
0.51.3 - libp2p-core
0.39.2 - multistream-select
0.12.1 - orchestra
0.0.5 - polkadot-node-core-pvf
1.0.0 - polkadot-node-subsystem-util
1.0.0 - rw-stream-sink
0.3.0 - sc-network
0.10.0-dev - sc-service
0.10.0-dev - sc-telemetry
4.0.0-dev - smoldot
0.11.0 - smoldot-light
0.9.0 - tokio-retry
0.3.0 - tracing-futures
0.2.5
- cumulus-relay-chain-rpc-interface
pin-project-internal
1.1.3crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405depends onused bypin-project-lite
0.1.12crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777used bypin-project-lite
0.2.13crates.io↘ 0↖ 11sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58pin-utils
0.1.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184piper
0.2.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4used bypkcs8
0.9.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4bapkcs8
0.10.2crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7pkg-config
0.3.27crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964platforms
3.1.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8used bypolkadot-approval-distribution
1.0.0github.com/paritytech/polkadot-sdk↘ 11↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-availability-bitfield-distribution
1.0.0github.com/paritytech/polkadot-sdk↘ 9↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-availability-distribution
1.0.0github.com/paritytech/polkadot-sdk↘ 16↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- derive_more
0.99.17 - fatality
0.0.6 - futures
0.3.28 - parity-scale-codec
3.6.5 - polkadot-erasure-coding
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-primitives
1.0.0 - rand
0.8.5 - schnellru
0.2.1 - sp-core
21.0.0 - sp-keystore
0.27.0 - thiserror
1.0.49 - tracing-gum
1.0.0
used by- derive_more
polkadot-availability-recovery
1.0.0github.com/paritytech/polkadot-sdk↘ 14↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- fatality
0.0.6 - futures
0.3.28 - parity-scale-codec
3.6.5 - polkadot-erasure-coding
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-primitives
1.0.0 - rand
0.8.5 - sc-network
0.10.0-dev - schnellru
0.2.1 - thiserror
1.0.49 - tracing-gum
1.0.0
- fatality
polkadot-cli
1.1.0github.com/paritytech/polkadot-sdk↘ 20↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- clap
4.4.6 - frame-benchmarking-cli
4.0.0-dev - futures
0.3.28 - log
0.4.20 - polkadot-node-metrics
1.0.0 - polkadot-performance-test
1.0.0 - polkadot-service
1.0.0 - sc-cli
0.10.0-dev - sc-executor
0.10.0-dev - sc-service
0.10.0-dev - sc-storage-monitor
0.1.0 - sc-sysinfo
6.0.0-dev - sc-tracing
4.0.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-keyring
24.0.0 - sp-maybe-compressed-blob
4.1.0-dev - substrate-build-script-utils
3.0.0 - thiserror
1.0.49 - try-runtime-cli
0.10.0-dev
- clap
polkadot-collator-protocol
1.0.0github.com/paritytech/polkadot-sdk↘ 15↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-core-primitives
1.0.0github.com/paritytech/polkadot-sdk↘ 5↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7polkadot-dispute-distribution
1.0.0github.com/paritytech/polkadot-sdk↘ 18↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- derive_more
0.99.17 - fatality
0.0.6 - futures
0.3.28 - futures-timer
3.0.2 - indexmap
1.9.3 - parity-scale-codec
3.6.5 - polkadot-erasure-coding
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-primitives
1.0.0 - sc-network
0.10.0-dev - schnellru
0.2.1 - sp-application-crypto
23.0.0 - sp-keystore
0.27.0 - thiserror
1.0.49 - tracing-gum
1.0.0
used by- derive_more
polkadot-erasure-coding
1.0.0github.com/paritytech/polkadot-sdk↘ 7↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-gossip-support
1.0.0github.com/paritytech/polkadot-sdk↘ 14↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-network-bridge
1.0.0github.com/paritytech/polkadot-sdk↘ 16↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- always-assert
0.1.3 - async-trait
0.1.73 - bytes
1.5.0 - fatality
0.0.6 - futures
0.3.28 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - polkadot-node-metrics
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - sc-network
0.10.0-dev - sp-consensus
0.10.0-dev - thiserror
1.0.49 - tracing-gum
1.0.0
- always-assert
polkadot-node-collation-generation
1.0.0github.com/paritytech/polkadot-sdk↘ 11↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-node-core-approval-voting
1.0.0github.com/paritytech/polkadot-sdk↘ 22↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- bitvec
1.0.1 - derive_more
0.99.17 - futures
0.3.28 - futures-timer
3.0.2 - kvdb
0.13.0 - merlin
2.0.1 - parity-scale-codec
3.6.5 - polkadot-node-jaeger
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - sc-keystore
4.0.0-dev - schnellru
0.2.1 - schnorrkel
0.9.1 - sp-application-crypto
23.0.0 - sp-consensus
0.10.0-dev - sp-consensus-slots
0.10.0-dev - sp-runtime
24.0.0 - thiserror
1.0.49 - tracing-gum
1.0.0
used by- bitvec
polkadot-node-core-av-store
1.0.0github.com/paritytech/polkadot-sdk↘ 15↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- bitvec
1.0.1 - futures
0.3.28 - futures-timer
3.0.2 - kvdb
0.13.0 - parity-scale-codec
3.6.5 - polkadot-erasure-coding
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - sp-consensus
0.10.0-dev - thiserror
1.0.49 - tracing-gum
1.0.0
used by- bitvec
polkadot-node-core-backing
1.0.0github.com/paritytech/polkadot-sdk↘ 12↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-bitfield-signing
1.0.0github.com/paritytech/polkadot-sdk↘ 8↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-candidate-validation
1.0.0github.com/paritytech/polkadot-sdk↘ 14↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - futures
0.3.28 - futures-timer
3.0.2 - parity-scale-codec
3.6.5 - polkadot-node-core-pvf
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - sp-maybe-compressed-blob
4.1.0-dev - tracing-gum
1.0.0
used by- async-trait
polkadot-node-core-chain-api
1.0.0github.com/paritytech/polkadot-sdk↘ 8↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-chain-selection
1.0.0github.com/paritytech/polkadot-sdk↘ 10↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-dispute-coordinator
1.0.0github.com/paritytech/polkadot-sdk↘ 12↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-parachains-inherent
1.0.0github.com/paritytech/polkadot-sdk↘ 10↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-prospective-parachains
1.0.0github.com/paritytech/polkadot-sdk↘ 10↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-provisioner
1.0.0github.com/paritytech/polkadot-sdk↘ 10↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-pvf
1.0.0github.com/paritytech/polkadot-sdk↘ 21↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- always-assert
0.1.3 - futures
0.3.28 - futures-timer
3.0.2 - libc
0.2.148 - parity-scale-codec
3.6.5 - pin-project
1.1.3 - polkadot-core-primitives
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - rand
0.8.5 - slotmap
1.0.6 - sp-core
21.0.0 - sp-maybe-compressed-blob
4.1.0-dev - sp-wasm-interface
14.0.0 - substrate-build-script-utils
3.0.0 - tempfile
3.8.0 - tokio
1.32.0 - tracing-gum
1.0.0
- always-assert
polkadot-node-core-pvf-checker
1.0.0github.com/paritytech/polkadot-sdk↘ 9↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-node-core-pvf-common
1.0.0github.com/paritytech/polkadot-sdk↘ 16↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-node-core-pvf-prepare-worker
1.0.0github.com/paritytech/polkadot-sdk↘ 16↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- futures
0.3.28 - libc
0.2.148 - parity-scale-codec
3.6.5 - polkadot-node-core-pvf-common
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - rayon
1.8.0 - sc-executor
0.10.0-dev - sc-executor-common
0.10.0-dev - sc-executor-wasmtime
0.10.0-dev - sp-io
23.0.0 - sp-maybe-compressed-blob
4.1.0-dev - sp-tracing
10.0.0 - tikv-jemalloc-ctl
0.5.4 - tokio
1.32.0 - tracing-gum
1.0.0
- futures
polkadot-node-core-runtime-api
1.0.0github.com/paritytech/polkadot-sdk↘ 8↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-node-jaeger
1.0.0github.com/paritytech/polkadot-sdk↘ 11↖ 8sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-node-metrics
1.0.0github.com/paritytech/polkadot-sdk↘ 12↖ 9sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-node-network-protocol
1.0.0github.com/paritytech/polkadot-sdk↘ 17↖ 14sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-channel
1.9.0 - async-trait
0.1.73 - bitvec
1.0.1 - derive_more
0.99.17 - fatality
0.0.6 - futures
0.3.28 - hex
0.4.3 - parity-scale-codec
3.6.5 - polkadot-node-jaeger
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-primitives
1.0.0 - rand
0.8.5 - sc-authority-discovery
0.10.0-dev - sc-network
0.10.0-dev - strum
0.24.1 - thiserror
1.0.49 - tracing-gum
1.0.0
used by- cumulus-relay-chain-minimal-node
0.1.0 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0
- async-channel
polkadot-node-primitives
1.0.0github.com/paritytech/polkadot-sdk↘ 15↖ 29sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - polkadot-approval-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-erasure-coding
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-performance-test
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0
- cumulus-client-collator
polkadot-node-subsystem
1.0.0github.com/paritytech/polkadot-sdk↘ 3↖ 28sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used by- cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-pov-recovery
0.1.0 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-api
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0
- cumulus-client-collator
polkadot-node-subsystem-types
1.0.0github.com/paritytech/polkadot-sdk↘ 17↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - derive_more
0.99.17 - futures
0.3.28 - orchestra
0.0.5 - polkadot-node-jaeger
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-statement-table
1.0.0 - sc-network
0.10.0-dev - sc-transaction-pool-api
4.0.0-dev - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-consensus-babe
0.10.0-dev - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
- async-trait
polkadot-node-subsystem-util
1.0.0github.com/paritytech/polkadot-sdk↘ 26↖ 21sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - derive_more
0.99.17 - fatality
0.0.6 - futures
0.3.28 - futures-channel
0.3.28 - itertools
0.10.5 - kvdb
0.13.0 - parity-db
0.4.11 - parity-scale-codec
3.6.5 - parking_lot
0.11.2 - pin-project
1.1.3 - polkadot-node-jaeger
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - prioritized-metered-channel
0.2.0 - rand
0.8.5 - schnellru
0.2.1 - sp-application-crypto
23.0.0 - sp-core
21.0.0 - sp-keystore
0.27.0 - thiserror
1.0.49 - tracing-gum
1.0.0
used by- cumulus-relay-chain-minimal-node
0.1.0 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0
- async-trait
polkadot-overseer
1.0.0github.com/paritytech/polkadot-sdk↘ 16↖ 15sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - futures
0.3.28 - futures-timer
3.0.2 - orchestra
0.0.5 - parking_lot
0.12.1 - polkadot-node-metrics
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-primitives
1.0.0 - sc-client-api
4.0.0-dev - schnellru
0.2.1 - sp-api
4.0.0-dev - sp-core
21.0.0 - tikv-jemalloc-ctl
0.5.4 - tracing-gum
1.0.0
used by- cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - polkadot-network-bridge
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-service
1.0.0
- async-trait
polkadot-parachain-primitives
1.0.0github.com/paritytech/polkadot-sdk↘ 10↖ 17sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-network
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-primitives-core
0.1.0 - opal-runtime
1.1.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-xcm-builder
1.0.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-client-network
polkadot-performance-test
1.0.0github.com/paritytech/polkadot-sdk↘ 11↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-primitives
1.0.0github.com/paritytech/polkadot-sdk↘ 19↖ 61sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- bitvec
1.0.1 - hex-literal
0.4.1 - parity-scale-codec
3.6.5 - polkadot-core-primitives
1.0.0 - polkadot-parachain-primitives
1.0.0 - scale-info
2.9.0 - serde
1.0.188 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-authority-discovery
4.0.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-keystore
0.27.0 - sp-runtime
24.0.0 - sp-staking
4.0.0-dev - sp-std
8.0.0
used by- cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - kusama-runtime-constants
1.0.0 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-erasure-coding
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-api
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-performance-test
1.0.0 - polkadot-rpc
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-constants
1.0.0 - polkadot-runtime-metrics
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0 - polkadot-statement-table
1.0.0 - rococo-runtime
1.0.0 - rococo-runtime-constants
1.0.0 - staging-kusama-runtime
1.0.0 - tracing-gum
1.0.0 - unique-node
1.1.0 - westend-runtime
1.0.0 - westend-runtime-constants
1.0.0
- bitvec
polkadot-rpc
1.0.0github.com/paritytech/polkadot-sdk↘ 25↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- jsonrpsee
0.16.3 - mmr-rpc
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - polkadot-primitives
1.0.0 - sc-chain-spec
4.0.0-dev - sc-client-api
4.0.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-epochs
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-rpc
4.0.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-transaction-pool-api
4.0.0-dev - sp-api
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-keystore
0.27.0 - sp-runtime
24.0.0 - substrate-frame-rpc-system
4.0.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev
used by- jsonrpsee
polkadot-runtime
1.0.0github.com/paritytech/polkadot-sdk↘ 90↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- bitvec
1.0.1 - frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - hex-literal
0.4.1 - log
0.4.20 - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collective
4.0.0-dev - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nomination-pools-runtime-api
1.0.0-dev - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-staking-reward-curve
4.0.0-dev - pallet-staking-runtime-api
4.0.0-dev - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parity-scale-codec
3.6.5 - polkadot-primitives
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-constants
1.0.0 - polkadot-runtime-parachains
1.0.0 - rustc-hex
2.1.0 - scale-info
2.9.0 - serde
1.0.188 - serde_derive
1.0.188 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-arithmetic
16.0.0 - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - static_assertions
1.1.0 - substrate-wasm-builder
5.0.0-dev
used by- bitvec
polkadot-runtime-common
1.0.0github.com/paritytech/polkadot-sdk↘ 39↖ 11sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- bitvec
1.0.1 - frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - impl-trait-for-tuples
0.2.2 - libsecp256k1
0.7.1 - log
0.4.20 - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-session
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-staking-reward-fn
4.0.0-dev - pallet-timestamp
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-vesting
4.0.0-dev - parity-scale-codec
3.6.5 - polkadot-primitives
1.0.0 - polkadot-runtime-parachains
1.0.0 - rustc-hex
2.1.0 - scale-info
2.9.0 - serde
1.0.188 - serde_derive
1.0.188 - slot-range-helper
1.0.0 - sp-api
4.0.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-npos-elections
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0 - staging-xcm
1.0.0 - static_assertions
1.1.0
- bitvec
polkadot-runtime-constants
1.0.0github.com/paritytech/polkadot-sdk↘ 7↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bypolkadot-runtime-metrics
1.0.0github.com/paritytech/polkadot-sdk↘ 6↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onpolkadot-runtime-parachains
1.0.0github.com/paritytech/polkadot-sdk↘ 39↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- bitflags
1.3.2 - bitvec
1.0.1 - derive_more
0.99.17 - frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - impl-trait-for-tuples
0.2.2 - log
0.4.20 - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-session
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-timestamp
4.0.0-dev - pallet-vesting
4.0.0-dev - parity-scale-codec
3.6.5 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime-metrics
1.0.0 - rand
0.8.5 - rand_chacha
0.3.1 - rustc-hex
2.1.0 - scale-info
2.9.0 - serde
1.0.188 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-keystore
0.27.0 - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0 - staging-xcm
1.0.0 - staging-xcm-executor
1.0.0 - static_assertions
1.1.0
- bitflags
polkadot-service
1.0.0github.com/paritytech/polkadot-sdk↘ 112↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - futures
0.3.28 - hex-literal
0.4.1 - is_executable
1.0.1 - kvdb
0.13.0 - kvdb-rocksdb
0.19.0 - log
0.4.20 - mmr-gadget
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - parity-db
0.4.11 - parity-scale-codec
3.6.5 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-core-primitives
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-api
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-rpc
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-statement-distribution
1.0.0 - rococo-runtime
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-executor
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-offchain
4.0.0-dev - sc-service
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - schnellru
0.2.1 - serde
1.0.188 - serde_json
1.0.107 - sp-api
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-keyring
24.0.0 - sp-keystore
0.27.0 - sp-mmr-primitives
4.0.0-dev - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-state-machine
0.28.0 - sp-storage
13.0.0 - sp-timestamp
4.0.0-dev - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - sp-weights
20.0.0 - staging-kusama-runtime
1.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49 - tracing-gum
1.0.0 - westend-runtime
1.0.0
- async-trait
polkadot-statement-distribution
1.0.0github.com/paritytech/polkadot-sdk↘ 17↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- arrayvec
0.7.4 - bitvec
1.0.1 - fatality
0.0.6 - futures
0.3.28 - futures-timer
3.0.2 - indexmap
1.9.3 - parity-scale-codec
3.6.5 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-primitives
1.0.0 - sp-keystore
0.27.0 - sp-staking
4.0.0-dev - thiserror
1.0.49 - tracing-gum
1.0.0
used by- arrayvec
polkadot-statement-table
1.0.0github.com/paritytech/polkadot-sdk↘ 3↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7polling
2.8.0crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dcedepends onused bypoly1305
0.7.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246edeused bypoly1305
0.8.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abfused bypolyval
0.5.3crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1used bypolyval
0.6.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fbused byportable-atomic
1.4.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum31114a898e107c51bb1609ffaf55a0e011cf6a4d7f1170d0015a165082c0338bused byppv-lite86
0.2.17crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6deprecompile-utils-macro
0.1.0workspace↘ 5↖ 3predicates
2.1.5crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addddepends onused bypredicates-core
1.0.6crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174predicates-tree
1.0.9crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecfdepends onused byprettyplease
0.1.25crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86depends onused byprettyplease
0.2.15crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9ddepends onused byprimitive-types
0.12.1crates.io↘ 6↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66prioritized-metered-channel
0.2.0crates.io↘ 8↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum382698e48a268c832d0b181ed438374a6bb708a82a8ca273bb0f61c74cf209c4depends onproc-macro-crate
1.3.1crates.io↘ 2↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919depends onused by- cumulus-pallet-parachain-system-proc-macro
0.1.0 - fatality-proc-macro
0.0.6 - frame-election-provider-solution-type
4.0.0-dev - frame-support-procedural-tools
4.0.0-dev - jsonrpsee-proc-macros
0.16.3 - multihash-derive
0.8.0 - num_enum_derive
0.7.0 - orchestra-proc-macro
0.0.5 - pallet-staking-reward-curve
4.0.0-dev - parity-scale-codec-derive
3.6.5 - sc-chain-spec-derive
4.0.0-dev - sc-tracing-proc-macro
4.0.0-dev - scale-info-derive
2.9.0 - sp-api-proc-macro
4.0.0-dev - sp-runtime-interface-proc-macro
11.0.0 - tracing-gum-proc-macro
1.0.0
- cumulus-pallet-parachain-system-proc-macro
proc-macro-error
1.0.4crates.io↘ 5↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumda25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38cproc-macro-error-attr
1.0.4crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869used byproc-macro-hack
0.5.20+deprecatedcrates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068proc-macro-warning
0.4.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258edepends onproc-macro2
1.0.67crates.io↘ 1↖ 87sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328depends onused by- aquamarine
0.3.2 - ark-ff-macros
0.4.2 - ark-serialize-derive
0.4.2 - asn1-rs-derive
0.1.0 - asn1-rs-derive
0.4.0 - asn1-rs-impl
0.1.0 - async-recursion
1.0.5 - async-trait
0.1.73 - auto_impl
1.1.0 - bindgen
0.65.1 - bondrewd-derive
0.3.18 - clap_derive
4.4.2 - cumulus-pallet-parachain-system-proc-macro
0.1.0 - curve25519-dalek-derive
0.1.0 - cxx-build
1.0.107 - cxxbridge-macro
1.0.107 - darling_core
0.14.4 - derivative
2.2.0 - derive-syn-parse
0.1.5 - derive_builder_core
0.11.2 - derive_more
0.99.17 - displaydoc
0.2.4 - docify_macros
0.2.4 - dyn-clonable-impl
0.9.0 - enum-as-inner
0.5.1 - enumflags2_derive
0.7.8 - enumn
0.1.12 - evm-coder-procedural
0.4.2 - evm-coder-substrate-procedural
0.1.0 - expander
0.0.4 - expander
0.0.6 - expander
2.0.0 - fatality-proc-macro
0.0.6 - frame-election-provider-solution-type
4.0.0-dev - frame-support-procedural
4.0.0-dev - frame-support-procedural-tools
4.0.0-dev - frame-support-procedural-tools-derive
3.0.0 - futures-macro
0.3.28 - impl-trait-for-tuples
0.2.2 - include_dir_macros
0.7.3 - jsonrpsee-proc-macros
0.16.3 - macro_magic_core
0.4.2 - macro_magic_core_macros
0.4.2 - mockall_derive
0.11.4 - multihash-derive
0.8.0 - nalgebra-macros
0.2.1 - num_enum_derive
0.7.0 - orchestra-proc-macro
0.0.5 - pallet-staking-reward-curve
4.0.0-dev - parity-scale-codec-derive
3.6.5 - pest_generator
2.7.4 - pin-project-internal
1.1.3 - precompile-utils-macro
0.1.0 - prettyplease
0.1.25 - prettyplease
0.2.15 - proc-macro-error
1.0.4 - proc-macro-error-attr
1.0.4 - proc-macro-warning
0.4.2 - prometheus-client-derive-encode
0.4.2 - prost-derive
0.11.9 - quote
1.0.33 - ref-cast-impl
1.0.20 - rlp-derive
0.1.0 - sc-chain-spec-derive
4.0.0-dev - sc-tracing-proc-macro
4.0.0-dev - scale-info-derive
2.9.0 - serde_derive
1.0.188 - sp-api-proc-macro
4.0.0-dev - sp-debug-derive
8.0.0 - sp-runtime-interface-proc-macro
11.0.0 - sp-version-proc-macro
8.0.0 - spez
0.1.2 - ss58-registry
1.43.0 - static_init_macro
1.0.2 - strum_macros
0.24.3 - syn
1.0.109 - syn
2.0.37 - synstructure
0.12.6 - thiserror-core-impl
1.0.38 - thiserror-impl
1.0.49 - tokio-macros
2.1.0 - tracing-attributes
0.1.26 - tracing-gum-proc-macro
1.0.0 - wasm-bindgen-backend
0.2.87 - wasm-bindgen-macro-support
0.2.87 - xcm-procedural
1.0.0 - zeroize_derive
1.4.2
- aquamarine
prometheus
0.13.3crates.io↘ 6↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum449811d15fbdf5ceb5c1144416066429cf82316e2ec8ce0c1f6f8a02e7bbcf8cprometheus-client
0.19.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721eused byprometheus-client-derive-encode
0.4.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8depends onused byprost
0.11.9crates.io↘ 2↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cddepends onprost-build
0.11.9crates.io↘ 14↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270depends onprost-derive
0.11.9crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4used byprost-types
0.11.9crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13depends onused bypsm
0.1.21crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874depends onused byquartz-runtime
1.1.0workspace↘ 104↖ 2depends on- app-promotion-rpc
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-timestamp
0.1.0 - cumulus-primitives-utility
0.1.0 - derivative
2.2.0 - evm-coder
0.4.2 - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - fp-self-contained
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - hex-literal
0.4.1 - impl-trait-for-tuples
0.2.2 - log
0.4.20 - num_enum
0.7.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-democracy
4.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-precompile-simple
2.0.0-dev - pallet-evm-transaction-payment
0.1.1 - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-gov-origins
0.2.1 - pallet-identity
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-nonfungible
0.1.14 - pallet-preimage
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-xcm
1.0.0 - parachain-info
0.1.0 - parity-scale-codec
3.6.5 - polkadot-parachain-primitives
1.0.0 - precompile-utils-macro
0.1.0 - scale-info
2.9.0 - serde
1.0.188 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-arithmetic
16.0.0 - sp-block-builder
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-std
8.0.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - substrate-wasm-builder
5.0.0-dev - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - up-sponsorship
0.1.0
used by- app-promotion-rpc
quick-error
1.2.3crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0used byquick-protobuf
0.8.1crates.io↘ 1↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1fdepends onquick-protobuf-codec
0.1.0crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8bquicksink
0.1.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum77de3c815e5a160b1539c6592796801df2043ae35e123b46d73380cfa57af858used byquinn-proto
0.9.5crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc956be1b23f4261676aed05a0046e204e8a6836e50203902683a718af0797989depends onused byquote
1.0.33crates.io↘ 1↖ 93sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293caedepends onused by- aquamarine
0.3.2 - ark-ff-asm
0.4.2 - ark-ff-macros
0.4.2 - ark-serialize-derive
0.4.2 - asn1-rs-derive
0.1.0 - asn1-rs-derive
0.4.0 - asn1-rs-impl
0.1.0 - async-recursion
1.0.5 - async-trait
0.1.73 - auto_impl
1.1.0 - bindgen
0.65.1 - bondrewd-derive
0.3.18 - clap_derive
4.4.2 - cumulus-pallet-parachain-system-proc-macro
0.1.0 - curve25519-dalek-derive
0.1.0 - cxx-build
1.0.107 - cxxbridge-macro
1.0.107 - darling_core
0.14.4 - darling_macro
0.14.4 - derivative
2.2.0 - derive-syn-parse
0.1.5 - derive_builder_core
0.11.2 - derive_more
0.99.17 - displaydoc
0.2.4 - docify_macros
0.2.4 - dyn-clonable-impl
0.9.0 - enum-as-inner
0.5.1 - enumflags2_derive
0.7.8 - enumn
0.1.12 - evm-coder-procedural
0.4.2 - evm-coder-substrate-procedural
0.1.0 - expander
0.0.4 - expander
0.0.6 - expander
2.0.0 - fatality-proc-macro
0.0.6 - frame-election-provider-solution-type
4.0.0-dev - frame-support-procedural
4.0.0-dev - frame-support-procedural-tools
4.0.0-dev - frame-support-procedural-tools-derive
3.0.0 - futures-macro
0.3.28 - impl-trait-for-tuples
0.2.2 - include_dir_macros
0.7.3 - jsonrpsee-proc-macros
0.16.3 - libp2p-swarm-derive
0.32.0 - macro_magic
0.4.2 - macro_magic_core
0.4.2 - macro_magic_core_macros
0.4.2 - macro_magic_macros
0.4.2 - mockall_derive
0.11.4 - multihash-derive
0.8.0 - nalgebra-macros
0.2.1 - num_enum_derive
0.7.0 - orchestra-proc-macro
0.0.5 - pallet-staking-reward-curve
4.0.0-dev - parity-scale-codec-derive
3.6.5 - pest_generator
2.7.4 - pin-project-internal
1.1.3 - polkadot-performance-test
1.0.0 - precompile-utils-macro
0.1.0 - proc-macro-error
1.0.4 - proc-macro-error-attr
1.0.4 - proc-macro-warning
0.4.2 - prometheus-client-derive-encode
0.4.2 - prost-derive
0.11.9 - ref-cast-impl
1.0.20 - rlp-derive
0.1.0 - sc-chain-spec-derive
4.0.0-dev - sc-tracing-proc-macro
4.0.0-dev - scale-info-derive
2.9.0 - serde_derive
1.0.188 - sp-api-proc-macro
4.0.0-dev - sp-core-hashing-proc-macro
9.0.0 - sp-debug-derive
8.0.0 - sp-runtime-interface-proc-macro
11.0.0 - sp-version-proc-macro
8.0.0 - spez
0.1.2 - ss58-registry
1.43.0 - static_init_macro
1.0.2 - struct-versioning
0.1.0 - strum_macros
0.24.3 - syn
1.0.109 - syn
2.0.37 - synstructure
0.12.6 - thiserror-core-impl
1.0.38 - thiserror-impl
1.0.49 - tokio-macros
2.1.0 - tracing-attributes
0.1.26 - tracing-gum-proc-macro
1.0.0 - wasm-bindgen-backend
0.2.87 - wasm-bindgen-macro
0.2.87 - wasm-bindgen-macro-support
0.2.87 - xcm-procedural
1.0.0 - zeroize_derive
1.4.2
- aquamarine
radium
0.7.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09used byrand
0.7.3crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03used byrand
0.8.5crates.io↘ 3↖ 66sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404used by- ark-std
0.4.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-rpc
2.0.0-dev - fixed-hash
0.8.0 - frame-benchmarking-cli
4.0.0-dev - interceptor
0.8.2 - jsonrpsee-core
0.16.3 - libp2p-core
0.39.2 - libp2p-identity
0.1.3 - libp2p-kad
0.43.3 - libp2p-mdns
0.43.1 - libp2p-noise
0.42.2 - libp2p-ping
0.42.0 - libp2p-quic
0.7.0-alpha.3 - libp2p-request-response
0.24.1 - libp2p-swarm
0.42.2 - libp2p-webrtc
0.4.0-alpha.4 - libsecp256k1
0.7.1 - mick-jaeger
0.1.8 - names
0.13.0 - pallet-collator-selection
5.0.0 - pallet-election-provider-multi-phase
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - parity-db
0.4.11 - polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-runtime-parachains
1.0.0 - quinn-proto
0.9.5 - rtp
0.6.8 - sc-authority-discovery
0.10.0-dev - sc-cli
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-network
0.10.0-dev - sc-offchain
4.0.0-dev - sc-service
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sdp
0.5.3 - smoldot
0.11.0 - smoldot-light
0.9.0 - soketto
0.7.1 - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-statement-store
4.0.0-dev - stun
0.4.4 - tiny-bip39
1.0.0 - tokio-retry
0.3.0 - trust-dns-proto
0.22.0 - turn
0.6.1 - twox-hash
1.6.3 - wasmtime-runtime
8.0.1 - webrtc
0.6.0 - webrtc-dtls
0.7.2 - webrtc-ice
0.9.1 - webrtc-media
0.5.1 - webrtc-sctp
0.7.0 - webrtc-util
0.7.0 - yamux
0.10.2
- ark-std
rand_chacha
0.2.2crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402depends onrand_chacha
0.3.1crates.io↘ 2↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88depends onrand_core
0.5.1crates.io↘ 1↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19depends onrand_core
0.6.4crates.io↘ 1↖ 28sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922cdepends onused by- aead
0.4.3 - ark-secret-scalar
0.0.2 - ark-transcript
0.0.2 - bandersnatch_vrfs
0.0.1 - crypto-bigint
0.4.9 - crypto-bigint
0.5.3 - crypto-common
0.1.6 - curve25519-dalek-ng
4.1.1 - dleq_vrf
0.0.2 - ed25519-dalek
2.0.0 - ed25519-zebra
3.1.0 - ed25519-zebra
4.0.3 - elliptic-curve
0.12.3 - elliptic-curve
0.13.5 - ff
0.12.1 - ff
0.13.0 - group
0.12.1 - group
0.13.0 - merlin
3.0.0 - rand
0.8.5 - rand_chacha
0.3.1 - rand_pcg
0.3.1 - schnorrkel
0.10.2 - signature
1.6.4 - signature
2.1.0 - snow
0.9.3 - webrtc-dtls
0.7.2 - x25519-dalek
2.0.0
- aead
rand_hc
0.2.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613cdepends onused byrand_pcg
0.3.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73edepends onrawpointer
0.2.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3used byrayon
1.8.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1depends onrayon-core
1.12.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658edused byrcgen
0.9.3crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcddrcgen
0.10.0crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785bdepends onredox_syscall
0.2.16crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519adepends onredox_syscall
0.3.5crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29depends onredox_users
0.4.3crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2breed-solomon-novelpoly
1.0.2crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum58130877ca403ab42c864fbac74bb319a0746c07a634a92a5cfc7f54af272582used byref-cast
1.0.20crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumacde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280depends onused byref-cast-impl
1.0.20crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925depends onused byregalloc2
0.6.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621used byregex
1.9.6crates.io↘ 4↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ffregex-automata
0.1.10crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132depends onused byregex-automata
0.3.9crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9used byregex-syntax
0.6.29crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1used byregex-syntax
0.7.5crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12daresolv-conf
0.7.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00depends onused byrfc6979
0.3.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabbdepends onused byrfc6979
0.4.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2depends onused byring
0.1.0github.com/w3f/ring-proof↘ 8↖ 1sourcegit+https://github.com/w3f/ring-proof?rev=0e948f3#0e948f3c28cbacecdd3020403c4841c0eb339213depends onused byring
0.16.20crates.io↘ 7↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fcripemd
0.1.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbd124222d17ad93a644ed9d011a40f4fb64aa54275c08cc216524a9ea82fb09fdepends onrlp
0.5.2crates.io↘ 3↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbb919243f34364b6bd2fc10ef797edbfa75f33c252e7998527479c6d6b47e1ecdepends onrlp-derive
0.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume33d7b2abe0c340d8797fe2907d3f20d3b5ea5908683618bfe80df7f621f672adepends onused byrocksdb
0.21.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffedepends onused byrococo-runtime
1.0.0github.com/paritytech/polkadot-sdk↘ 81↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- binary-merkle-tree
4.0.0-dev - frame-benchmarking
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - hex-literal
0.4.1 - log
0.4.20 - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collective
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-offences
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-sudo
4.0.0-dev - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parity-scale-codec
3.6.5 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - rococo-runtime-constants
1.0.0 - scale-info
2.9.0 - serde
1.0.188 - serde_derive
1.0.188 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-mmr-primitives
4.0.0-dev - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - static_assertions
1.1.0 - substrate-wasm-builder
5.0.0-dev
used by- binary-merkle-tree
rococo-runtime-constants
1.0.0github.com/paritytech/polkadot-sdk↘ 7↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused byrpassword
7.2.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6678cf63ab3491898c0d021b493c94c9b221d91295294a2a5746eacbe5928322depends onused byrtcp
0.7.2crates.io↘ 3↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691rtnetlink
0.10.1crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0depends onused byrtoolbox
0.0.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum034e22c514f5c0cb8a10ff341b9b048b5ceb21591f31c8f44c43b960f9b3524adepends onused byrtp
0.6.8crates.io↘ 6↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80rustc_version
0.4.0crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366depends onrustc-demangle
0.1.23crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76rustc-hash
1.1.0crates.io↘ 0↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2rustc-hex
2.1.0crates.io↘ 0↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3e75f6a532d0fd9f7f13144f392b6ad56a32696bfcd9c78f797f16bbb6f072d6rusticata-macros
4.1.0crates.io↘ 1↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfaf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632depends onrustix
0.36.15crates.io↘ 6↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc37f1bd5ef1b5422177b7646cba67430579cfe2ace80f284fee876bca52ad941rustix
0.37.24crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4279d76516df406a8bd37e7dff53fd37d1a093f997a3c34a5c21658c126db06drustix
0.38.15crates.io↘ 5↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd2f9da0cbd88f9f09e7814e388301c8414c51c62aa6ce1e4b5c551d49d96e531rustls
0.19.1crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7used byrustls
0.20.9crates.io↘ 4↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99depends onrustls
0.21.7crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8rustls-native-certs
0.6.3crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00rustls-pemfile
1.0.3crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2depends onused byrustls-webpki
0.100.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5f6a5fc258f1c1276dfe3016516945546e2d5383911efc0fc4f1cdc5df3a4ae3depends onused byrustls-webpki
0.101.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fedepends onused byrustversion
1.0.14crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4ruzstd
0.4.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdcused byrw-stream-sink
0.3.0crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04ryu
1.0.15crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741used bysafe_arch
0.7.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354depends onused bysame-file
1.0.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502depends onused bysc-allocator
4.1.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sc-authority-discovery
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 21↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - futures
0.3.28 - futures-timer
3.0.2 - ip_network
0.4.1 - libp2p
0.51.3 - log
0.4.20 - multihash
0.17.0 - parity-scale-codec
3.6.5 - prost
0.11.9 - prost-build
0.11.9 - rand
0.8.5 - sc-client-api
4.0.0-dev - sc-network
0.10.0-dev - sp-api
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-keystore
0.27.0 - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
- async-trait
sc-basic-authorship
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 16↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- futures
0.3.28 - futures-timer
3.0.2 - log
0.4.20 - parity-scale-codec
3.6.5 - sc-block-builder
0.10.0-dev - sc-client-api
4.0.0-dev - sc-proposer-metrics
0.10.0-dev - sc-telemetry
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev
- futures
sc-block-builder
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-chain-spec
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-chain-spec-derive
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bysc-cli
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 32↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - chrono
0.4.31 - clap
4.4.6 - fdlimit
0.2.1 - futures
0.3.28 - libp2p-identity
0.1.3 - log
0.4.20 - names
0.13.0 - parity-scale-codec
3.6.5 - rand
0.8.5 - regex
1.9.6 - rpassword
7.2.0 - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-service
0.10.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sc-utils
4.0.0-dev - serde
1.0.188 - serde_json
1.0.107 - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-keyring
24.0.0 - sp-keystore
0.27.0 - sp-panic-handler
8.0.0 - sp-runtime
24.0.0 - sp-version
22.0.0 - thiserror
1.0.49 - tiny-bip39
1.0.0 - tokio
1.32.0
- array-bytes
sc-client-api
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 19↖ 50sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- fnv
1.0.7 - futures
0.3.28 - log
0.4.20 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - sc-executor
0.10.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-database
4.0.0-dev - sp-externalities
0.19.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-statement-store
4.0.0-dev - sp-storage
13.0.0 - substrate-prometheus-endpoint
0.10.0-dev
used by- cumulus-client-cli
0.1.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - fc-storage
1.0.0-dev - frame-benchmarking-cli
4.0.0-dev - mmr-gadget
4.0.0-dev - polkadot-node-core-chain-api
1.0.0 - polkadot-overseer
1.0.0 - polkadot-rpc
1.0.0 - polkadot-service
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-epochs
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-informant
0.10.0-dev - sc-network
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0
- fnv
sc-client-db
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 19↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- hash-db
0.16.0 - kvdb
0.13.0 - kvdb-memorydb
0.13.0 - kvdb-rocksdb
0.19.0 - linked-hash-map
0.5.6 - log
0.4.20 - parity-db
0.4.11 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - sc-client-api
4.0.0-dev - sc-state-db
0.10.0-dev - schnellru
0.2.1 - sp-arithmetic
16.0.0 - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-database
4.0.0-dev - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-trie
22.0.0
- hash-db
sc-consensus
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 18↖ 17sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - futures
0.3.28 - futures-timer
3.0.2 - libp2p-identity
0.1.3 - log
0.4.20 - mockall
0.11.4 - parking_lot
0.12.1 - sc-client-api
4.0.0-dev - sc-utils
4.0.0-dev - serde
1.0.188 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
used by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - fc-consensus
2.0.0-dev - polkadot-service
1.0.0 - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-epochs
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-service
0.10.0-dev - unique-node
1.1.0
- async-trait
sc-consensus-aura
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 22↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - futures
0.3.28 - log
0.4.20 - parity-scale-codec
3.6.5 - sc-block-builder
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-telemetry
4.0.0-dev - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-keystore
0.27.0 - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
- async-trait
sc-consensus-babe
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 29↖ 8sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - fork-tree
3.0.0 - futures
0.3.28 - log
0.4.20 - num-bigint
0.4.4 - num-rational
0.4.1 - num-traits
0.2.16 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-epochs
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-telemetry
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - scale-info
2.9.0 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-keystore
0.27.0 - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
- async-trait
sc-consensus-babe-rpc
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 15↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-consensus-beefy
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 27↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - async-channel
1.9.0 - async-trait
0.1.73 - fnv
1.0.7 - futures
0.3.28 - log
0.4.20 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-network
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-utils
4.0.0-dev - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-core
21.0.0 - sp-keystore
0.27.0 - sp-mmr-primitives
4.0.0-dev - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49 - wasm-timer
0.2.5
- array-bytes
sc-consensus-beefy-rpc
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-consensus-epochs
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 6↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-consensus-grandpa
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 34↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- ahash
0.8.3 - array-bytes
6.1.0 - async-trait
0.1.73 - dyn-clone
1.0.14 - finality-grandpa
0.16.2 - fork-tree
3.0.0 - futures
0.3.28 - futures-timer
3.0.2 - log
0.4.20 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - rand
0.8.5 - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-telemetry
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - serde_json
1.0.107 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-core
21.0.0 - sp-keystore
0.27.0 - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
- ahash
sc-consensus-grandpa-rpc
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 13↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-consensus-manual-seal
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 28↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- assert_matches
1.5.0 - async-trait
0.1.73 - futures
0.3.28 - futures-timer
3.0.2 - jsonrpsee
0.16.3 - log
0.4.20 - parity-scale-codec
3.6.5 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-epochs
0.10.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - serde
1.0.188 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-keystore
0.27.0 - sp-runtime
24.0.0 - sp-timestamp
4.0.0-dev - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
used by- assert_matches
sc-consensus-slots
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 16↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - futures
0.3.28 - futures-timer
3.0.2 - log
0.4.20 - parity-scale-codec
3.6.5 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-telemetry
4.0.0-dev - sp-arithmetic
16.0.0 - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-runtime
24.0.0 - sp-state-machine
0.28.0
- async-trait
sc-executor
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 15↖ 11sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-executor-common
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 5↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-executor-wasmtime
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-informant
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-keystore
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 7↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-network
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 34↖ 25sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - async-channel
1.9.0 - async-trait
0.1.73 - asynchronous-codec
0.6.2 - bytes
1.5.0 - either
1.9.0 - fnv
1.0.7 - futures
0.3.28 - futures-timer
3.0.2 - ip_network
0.4.1 - libp2p
0.51.3 - linked_hash_set
0.1.4 - log
0.4.20 - mockall
0.11.4 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - partial_sort
0.2.0 - pin-project
1.1.3 - rand
0.8.5 - sc-client-api
4.0.0-dev - sc-network-common
0.10.0-dev - sc-utils
4.0.0-dev - serde
1.0.188 - serde_json
1.0.107 - smallvec
1.11.1 - sp-arithmetic
16.0.0 - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49 - unsigned-varint
0.7.2 - wasm-timer
0.2.5 - zeroize
1.6.0
used by- cumulus-client-service
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - fc-rpc
2.0.0-dev - polkadot-availability-recovery
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-service
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-informant
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-offchain
4.0.0-dev - sc-service
0.10.0-dev - unique-node
1.1.0
- array-bytes
sc-network-bitswap
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 13↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-network-common
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 12sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-network-gossip
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-network-light
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 14↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-network-sync
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 27↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - async-channel
1.9.0 - async-trait
0.1.73 - fork-tree
3.0.0 - futures
0.3.28 - futures-timer
3.0.2 - libp2p
0.51.3 - log
0.4.20 - mockall
0.11.4 - parity-scale-codec
3.6.5 - prost
0.11.9 - prost-build
0.11.9 - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-utils
4.0.0-dev - schnellru
0.2.1 - smallvec
1.11.1 - sp-arithmetic
16.0.0 - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
- array-bytes
sc-network-transactions
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-offchain
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 27↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - bytes
1.5.0 - fnv
1.0.7 - futures
0.3.28 - futures-timer
3.0.2 - hyper
0.14.27 - hyper-rustls
0.24.1 - libp2p
0.51.3 - log
0.4.20 - num_cpus
1.16.0 - once_cell
1.18.0 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - rand
0.8.5 - sc-client-api
4.0.0-dev - sc-network
0.10.0-dev - sc-network-common
0.10.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - sp-api
4.0.0-dev - sp-core
21.0.0 - sp-externalities
0.19.0 - sp-keystore
0.27.0 - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - threadpool
1.8.1 - tracing
0.1.37
- array-bytes
sc-proposer-metrics
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sc-rpc
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 24↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- futures
0.3.28 - jsonrpsee
0.16.3 - log
0.4.20 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-client-api
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - serde_json
1.0.107 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-keystore
0.27.0 - sp-offchain
4.0.0-dev - sp-rpc
6.0.0 - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-statement-store
4.0.0-dev - sp-version
22.0.0 - tokio
1.32.0
- futures
sc-rpc-api
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 8sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-rpc-server
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysc-rpc-spec-v2
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 21↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - futures
0.3.28 - futures-util
0.3.28 - hex
0.4.3 - jsonrpsee
0.16.3 - log
0.4.20 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - sc-chain-spec
4.0.0-dev - sc-client-api
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - serde
1.0.188 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-version
22.0.0 - thiserror
1.0.49 - tokio
1.32.0 - tokio-stream
0.1.14
used by- array-bytes
sc-service
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 57↖ 12sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - directories
4.0.1 - exit-future
0.2.0 - futures
0.3.28 - futures-timer
3.0.2 - jsonrpsee
0.16.3 - log
0.4.20 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - pin-project
1.1.3 - rand
0.8.5 - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-executor
0.10.0-dev - sc-informant
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-server
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - serde
1.0.188 - serde_json
1.0.107 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-externalities
0.19.0 - sp-keystore
0.27.0 - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-state-machine
0.28.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-transaction-storage-proof
4.0.0-dev - sp-trie
22.0.0 - sp-version
22.0.0 - static_init
1.0.3 - substrate-prometheus-endpoint
0.10.0-dev - tempfile
3.8.0 - thiserror
1.0.49 - tokio
1.32.0 - tracing
0.1.37 - tracing-futures
0.2.5
- async-trait
sc-state-db
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bysc-storage-monitor
0.1.0github.com/paritytech/polkadot-sdk↘ 7↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bysc-sync-state-rpc
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-sysinfo
6.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsc-telemetry
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 14sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-service
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - polkadot-service
1.0.0 - sc-basic-authorship
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-service
0.10.0-dev - sc-sysinfo
6.0.0-dev - unique-node
1.1.0
- cumulus-client-consensus-aura
sc-tracing
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 22↖ 8sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- ansi_term
0.12.1 - atty
0.2.14 - chrono
0.4.31 - lazy_static
1.4.0 - libc
0.2.148 - log
0.4.20 - parking_lot
0.12.1 - regex
1.9.6 - rustc-hash
1.1.0 - sc-client-api
4.0.0-dev - sc-tracing-proc-macro
4.0.0-dev - serde
1.0.188 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-rpc
6.0.0 - sp-runtime
24.0.0 - sp-tracing
10.0.0 - thiserror
1.0.49 - tracing
0.1.37 - tracing-log
0.1.3 - tracing-subscriber
0.2.25
- ansi_term
sc-tracing-proc-macro
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bysc-transaction-pool
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 19↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - futures
0.3.28 - futures-timer
3.0.2 - linked-hash-map
0.5.6 - log
0.4.20 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - sc-client-api
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sc-utils
4.0.0-dev - serde
1.0.188 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-runtime
24.0.0 - sp-tracing
10.0.0 - sp-transaction-pool
4.0.0-dev - substrate-prometheus-endpoint
0.10.0-dev - thiserror
1.0.49
- async-trait
sc-transaction-pool-api
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 9↖ 16sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- fc-rpc
2.0.0-dev - polkadot-node-subsystem-types
1.0.0 - polkadot-rpc
1.0.0 - polkadot-service
1.0.0 - sc-basic-authorship
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-transaction-pool
4.0.0-dev - substrate-frame-rpc-system
4.0.0-dev
- fc-rpc
sc-utils
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 18sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-service
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-network
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-telemetry
4.0.0-dev - sc-transaction-pool
4.0.0-dev
- cumulus-client-service
scale-info
2.9.0crates.io↘ 6↖ 147sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum35c0a159d0c45c12b20c5a844feb1fe4bea86e28f17b92a5f0c42193634d3782depends onused by- ark-scale
0.0.11 - bounded-collections
0.1.8 - cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - ethbloom
0.13.0 - ethereum
0.14.0 - ethereum-types
0.14.1 - evm
0.39.1 - evm-core
0.39.0 - finality-grandpa
0.16.2 - fp-account
1.0.0-dev - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - fp-self-contained
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-metadata
16.0.0 - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-transaction-payment
0.1.1 - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-gov-origins
0.2.1 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nonfungible
0.1.14 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parachain-info
0.1.0 - polkadot-core-primitives
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - primitive-types
0.12.1 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-consensus-babe
0.10.0-dev - sc-rpc-api
0.10.0-dev - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-authority-discovery
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-metadata-ir
0.1.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-statement-store
4.0.0-dev - sp-transaction-storage-proof
4.0.0-dev - sp-trie
22.0.0 - sp-version
22.0.0 - sp-weights
20.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - westend-runtime
1.0.0
- ark-scale
scale-info-derive
2.9.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum912e55f6d20e0e80d63733872b40e1227c0bce1e1ab81ba67d696339bfd7fd29used byschannel
0.1.22crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88depends onused byschnellru
0.2.1crates.io↘ 3↖ 20sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774ddepends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-rpc
2.0.0-dev - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-service
1.0.0 - sc-client-db
0.10.0-dev - sc-executor
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-sync
0.10.0-dev - sp-blockchain
4.0.0-dev - sp-trie
22.0.0
- cumulus-client-consensus-aura
schnorrkel
0.9.1crates.io↘ 10↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum021b403afe70d81eea68f6ea12f6b3c9588e5d536a94c3bf80f15e7faa267862depends onschnorrkel
0.10.2crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum844b7645371e6ecdf61ff246ba1958c29e802881a749ae3fb1993675d210d28ddepends onused byscopeguard
1.2.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49scratch
1.0.7crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152used bysct
0.6.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228cedepends onused bysct
0.7.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4depends onused bysdp
0.5.3crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13used bysec1
0.3.0crates.io↘ 6↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928sec1
0.7.3crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dcused bysecp256k1
0.24.3crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62depends onused bysecp256k1-sys
0.6.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4bdepends onused bysecrecy
0.8.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91edepends onused bysecurity-framework
2.9.2crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4dedepends onused bysecurity-framework-sys
2.9.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7adepends onused bysemver
0.6.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7a3186ec9e65071a2095434b1f5bb24838d4e8e130f584c790f6033c79943537depends onused bysemver
1.0.19crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0depends onsemver-parser
0.7.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3used byserde
1.0.188crates.io↘ 1↖ 136sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549edepends onused by- beef
0.5.2 - bincode
1.3.3 - bounded-collections
0.1.8 - bstr
1.6.2 - camino
1.1.6 - cargo-platform
0.1.3 - cargo_metadata
0.15.4 - cid
0.9.0 - cranelift-entity
0.95.1 - cumulus-relay-chain-rpc-interface
0.1.0 - ed25519-dalek
2.0.0 - ethereum
0.14.0 - evm
0.39.1 - evm-core
0.39.0 - fc-rpc
2.0.0-dev - fc-rpc-core
1.1.0-dev - fp-account
1.0.0-dev - fp-evm
3.0.0-dev - fp-self-contained
1.0.0-dev - fp-storage
2.0.0 - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-metadata
16.0.0 - frame-remote-externalities
0.10.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - handlebars
4.4.0 - hashbrown
0.14.1 - impl-serde
0.4.0 - indexmap
1.9.3 - jsonrpsee-core
0.16.3 - jsonrpsee-http-client
0.16.3 - jsonrpsee-server
0.16.3 - jsonrpsee-types
0.16.3 - libp2p-webrtc
0.4.0-alpha.4 - libsecp256k1
0.7.1 - mmr-rpc
4.0.0-dev - multiaddr
0.17.1 - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-offences
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-xcm
1.0.0 - parity-scale-codec
3.6.5 - polkadot-node-primitives
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - rtp
0.6.8 - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-network
0.10.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - scale-info
2.9.0 - semver
1.0.19 - serde_json
1.0.107 - serde_spanned
0.6.3 - smoldot
0.11.0 - smoldot-light
0.9.0 - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-rpc
6.0.0 - sp-runtime
24.0.0 - sp-staking
4.0.0-dev - sp-storage
13.0.0 - sp-version
22.0.0 - sp-weights
20.0.0 - ss58-registry
1.43.0 - staging-kusama-runtime
1.0.0 - staging-xcm
1.0.0 - substrate-rpc-client
0.10.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev - time
0.3.29 - tinytemplate
1.2.1 - toml
0.5.11 - toml
0.7.8 - toml_datetime
0.6.3 - toml_edit
0.19.15 - tracing-serde
0.1.3 - tracing-subscriber
0.2.25 - try-runtime-cli
0.10.0-dev - unique-node
1.1.0 - unique-runtime
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - wasmtime
8.0.1 - wasmtime-cache
8.0.1 - wasmtime-environ
8.0.1 - wasmtime-jit
8.0.1 - wasmtime-types
8.0.1 - webrtc
0.6.0 - webrtc-dtls
0.7.2 - webrtc-ice
0.9.1 - westend-runtime
1.0.0 - x25519-dalek
2.0.0
- beef
serde_derive
1.0.188crates.io↘ 3↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2depends onserde_json
1.0.107crates.io↘ 3↖ 33sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65depends onused by- cargo_metadata
0.15.4 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-rpc-core
1.1.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-support
4.0.0-dev - handlebars
4.4.0 - jsonrpsee-core
0.16.3 - jsonrpsee-http-client
0.16.3 - jsonrpsee-server
0.16.3 - jsonrpsee-types
0.16.3 - polkadot-service
1.0.0 - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-server
4.0.0-dev - sc-service
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - smoldot
0.11.0 - smoldot-light
0.9.0 - sp-genesis-builder
0.1.0 - ss58-registry
1.43.0 - tinytemplate
1.2.1 - tracing-subscriber
0.2.25 - try-runtime-cli
0.10.0-dev - unique-node
1.1.0 - webrtc
0.6.0 - webrtc-ice
0.9.1
- cargo_metadata
serde_spanned
0.6.3crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186depends onused bysha-1
0.9.8crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6used bysha1
0.10.6crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6badepends onused bysha2
0.8.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69used bysha2
0.9.9crates.io↘ 5↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800sha2
0.10.8crates.io↘ 3↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8depends onused by- bandersnatch_vrfs
0.0.1 - ed25519-dalek
2.0.0 - ed25519-zebra
4.0.3 - k256
0.13.1 - libp2p-identity
0.1.3 - libp2p-kad
0.43.3 - libp2p-noise
0.42.2 - multihash
0.17.0 - p256
0.11.1 - p384
0.11.2 - pest_meta
2.7.4 - smoldot
0.11.0 - snow
0.9.3 - sp-core-hashing
9.0.0 - sp-statement-store
4.0.0-dev - tiny-bip39
1.0.0 - wasmtime-cache
8.0.1 - webrtc
0.6.0 - webrtc-dtls
0.7.2
- bandersnatch_vrfs
sha3
0.8.2crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdd26bc0e7a2e3a7c959bc494caf58b72ee0c71d67704e9520f736ca7e4853ecfused bysha3
0.10.8crates.io↘ 2↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60depends onsha3-const
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb04774de876479a8f712e787f8271b14712971329a4be66c6dff144db7cfc343used bysharded-slab
0.1.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc1b21f559e07218024e7e9f90f96f601825397de0e25420135f7f952453fed0bdepends onused byshlex
1.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380used bysignal-hook
0.3.17crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801depends onused bysignal-hook-registry
1.4.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1depends onused bysignature
1.6.4crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7cdepends onused bysignature
2.1.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500depends onused bysimba
0.8.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceaeused bysiphasher
0.3.11crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0dslab
0.4.9crates.io↘ 1↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67depends onslice-group-by
0.3.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7used byslot-range-helper
1.0.0github.com/paritytech/polkadot-sdk↘ 5↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used byslotmap
1.0.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342depends onused bysmallvec
1.11.1crates.io↘ 0↖ 42sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5aused by- cfg-expr
0.15.5 - cranelift-codegen
0.95.1 - cranelift-frontend
0.95.1 - cranelift-wasm
0.95.1 - fc-db
2.0.0-dev - frame-support
4.0.0-dev - kusama-runtime-constants
1.0.0 - kvdb
0.13.0 - kvdb-rocksdb
0.19.0 - libp2p-core
0.39.2 - libp2p-dns
0.39.0 - libp2p-identify
0.42.2 - libp2p-kad
0.43.3 - libp2p-mdns
0.43.1 - libp2p-request-response
0.24.1 - libp2p-swarm
0.42.2 - multistream-select
0.12.1 - opal-runtime
1.1.0 - pallet-configuration
0.2.0 - parking_lot_core
0.8.6 - parking_lot_core
0.9.8 - polkadot-node-subsystem-types
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-constants
1.0.0 - quartz-runtime
1.1.0 - regalloc2
0.6.1 - rococo-runtime
1.0.0 - rococo-runtime-constants
1.0.0 - sc-network
0.10.0-dev - sc-network-sync
0.10.0-dev - smoldot
0.11.0 - sp-state-machine
0.28.0 - sp-weights
20.0.0 - staging-kusama-runtime
1.0.0 - tracing-subscriber
0.2.25 - trie-db
0.27.1 - trust-dns-proto
0.22.0 - trust-dns-resolver
0.22.0 - unique-runtime
1.1.0 - wasmi
0.31.0 - westend-runtime
1.0.0 - westend-runtime-constants
1.0.0
- cfg-expr
smol
1.3.0crates.io↘ 9↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1depends onused bysmoldot
0.11.0crates.io↘ 46↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc0bb30cf57b7b5f6109ce17c3164445e2d6f270af2cb48f6e4d31c2967c9a9f5depends on- arrayvec
0.7.4 - async-lock
2.8.0 - atomic-take
1.1.0 - base64
0.21.4 - bip39
2.0.0 - blake2-rfc
0.2.18 - bs58
0.5.0 - chacha20
0.9.1 - crossbeam-queue
0.3.8 - derive_more
0.99.17 - ed25519-zebra
4.0.3 - either
1.9.0 - event-listener
2.5.3 - fnv
1.0.7 - futures-lite
1.13.0 - futures-util
0.3.28 - hashbrown
0.14.1 - hex
0.4.3 - hmac
0.12.1 - itertools
0.11.0 - libsecp256k1
0.7.1 - merlin
3.0.0 - no-std-net
0.6.0 - nom
7.1.3 - num-bigint
0.4.4 - num-rational
0.4.1 - num-traits
0.2.16 - pbkdf2
0.12.2 - pin-project
1.1.3 - poly1305
0.8.0 - rand
0.8.5 - rand_chacha
0.3.1 - ruzstd
0.4.0 - schnorrkel
0.10.2 - serde
1.0.188 - serde_json
1.0.107 - sha2
0.10.8 - sha3
0.10.8 - siphasher
0.3.11 - slab
0.4.9 - smallvec
1.11.1 - soketto
0.7.1 - twox-hash
1.6.3 - wasmi
0.31.0 - x25519-dalek
2.0.0 - zeroize
1.6.0
- arrayvec
smoldot-light
0.9.0crates.io↘ 28↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum256b5bad1d6b49045e95fe87492ce73d5af81545d8b4d8318a872d2007024c33depends on- async-channel
1.9.0 - async-lock
2.8.0 - base64
0.21.4 - blake2-rfc
0.2.18 - derive_more
0.99.17 - either
1.9.0 - event-listener
2.5.3 - fnv
1.0.7 - futures-channel
0.3.28 - futures-lite
1.13.0 - futures-util
0.3.28 - hashbrown
0.14.1 - hex
0.4.3 - itertools
0.11.0 - log
0.4.20 - lru
0.11.1 - no-std-net
0.6.0 - parking_lot
0.12.1 - pin-project
1.1.3 - rand
0.8.5 - rand_chacha
0.3.1 - serde
1.0.188 - serde_json
1.0.107 - siphasher
0.3.11 - slab
0.4.9 - smol
1.3.0 - smoldot
0.11.0 - zeroize
1.6.0
- async-channel
snap
1.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831used bysnow
0.9.3crates.io↘ 9↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0c9d1425eb528a21de2755c75af4c9b5d57f50a0d4c3b7f1828a4cd03f8ba155depends onused bysocket2
0.4.9crates.io↘ 2↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662depends onsocket2
0.5.4crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989edepends onused bysoketto
0.7.1crates.io↘ 9↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2depends onsp-api
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 14↖ 80sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- app-promotion-rpc
0.1.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-service
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-consensus
2.0.0-dev - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - fc-storage
1.0.0-dev - fp-rpc
3.0.0-dev - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-support
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - mmr-gadget
4.0.0-dev - mmr-rpc
4.0.0-dev - opal-runtime
1.1.0 - pallet-beefy-mmr
4.0.0-dev - pallet-nomination-pools-runtime-api
1.0.0-dev - pallet-staking-runtime-api
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-whitelist
4.0.0-dev - polkadot-node-subsystem-types
1.0.0 - polkadot-overseer
1.0.0 - polkadot-primitives
1.0.0 - polkadot-rpc
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-executor
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-genesis-builder
0.1.0 - sp-mmr-primitives
4.0.0-dev - sp-offchain
4.0.0-dev - sp-session
4.0.0-dev - sp-statement-store
4.0.0-dev - sp-transaction-pool
4.0.0-dev - staging-kusama-runtime
1.0.0 - substrate-frame-rpc-system
4.0.0-dev - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0 - unique-runtime
1.1.0 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - westend-runtime
1.0.0
- app-promotion-rpc
sp-api-proc-macro
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 7↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysp-application-crypto
23.0.0github.com/paritytech/polkadot-sdk↘ 6↖ 31sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used by- cumulus-client-consensus-aura
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - frame-benchmarking
4.0.0-dev - pallet-aura
4.0.0-dev - pallet-authority-discovery
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-staking
4.0.0-dev - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime-parachains
1.0.0 - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-keystore
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-runtime
24.0.0 - sp-statement-store
4.0.0-dev - staging-kusama-runtime
1.0.0 - westend-runtime
1.0.0
- cumulus-client-consensus-aura
sp-arithmetic
16.0.0github.com/paritytech/polkadot-sdk↘ 7↖ 29sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- frame-election-provider-support
4.0.0-dev - frame-support
4.0.0-dev - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - pallet-configuration
0.2.0 - pallet-election-provider-multi-phase
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-nis
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking-reward-fn
4.0.0-dev - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - quartz-runtime
1.1.0 - sc-client-db
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-network
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-utils
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-runtime
24.0.0 - sp-weights
20.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - unique-runtime
1.1.0
- frame-election-provider-support
sp-authority-discovery
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 6↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-block-builder
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 4↖ 17sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used by- cumulus-client-consensus-aura
0.1.0 - fc-consensus
2.0.0-dev - fc-rpc
2.0.0-dev - opal-runtime
1.1.0 - polkadot-rpc
1.0.0 - polkadot-runtime
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-block-builder
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - staging-kusama-runtime
1.0.0 - substrate-frame-rpc-system
4.0.0-dev - unique-node
1.1.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-client-consensus-aura
sp-blockchain
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 49sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-service
0.1.0 - cumulus-relay-chain-interface
0.1.0 - fc-db
2.0.0-dev - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - fc-storage
1.0.0-dev - frame-benchmarking-cli
4.0.0-dev - mmr-gadget
4.0.0-dev - mmr-rpc
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - polkadot-node-core-chain-api
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-rpc
1.0.0 - polkadot-service
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-epochs
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-informant
0.10.0-dev - sc-network
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - substrate-frame-rpc-system
4.0.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0
- cumulus-client-consensus-aura
sp-consensus
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 33sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-consensus-proposer
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - fc-consensus
2.0.0-dev - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - mmr-gadget
4.0.0-dev - polkadot-network-bridge
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-rpc
1.0.0 - polkadot-service
1.0.0 - sc-basic-authorship
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-service
0.10.0-dev - sp-blockchain
4.0.0-dev
- cumulus-client-collator
sp-consensus-aura
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 14sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - cumulus-primitives-aura
0.1.0 - fc-rpc
2.0.0-dev - opal-runtime
1.1.0 - pallet-aura
4.0.0-dev - pallet-collator-selection
5.0.0 - quartz-runtime
1.1.0 - sc-consensus-aura
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - try-runtime-cli
0.10.0-dev - unique-node
1.1.0 - unique-runtime
1.1.0 - up-common
1.1.0
- cumulus-client-consensus-aura
sp-consensus-babe
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 16sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - pallet-babe
4.0.0-dev - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-rpc
1.0.0 - polkadot-runtime
1.0.0 - polkadot-service
1.0.0 - rococo-runtime
1.0.0 - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - staging-kusama-runtime
1.0.0 - try-runtime-cli
0.10.0-dev - westend-runtime
1.0.0
- cumulus-relay-chain-minimal-node
sp-consensus-beefy
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-consensus-grandpa
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-consensus-slots
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 5↖ 9sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sp-core
21.0.0github.com/paritytech/polkadot-sdk↘ 40↖ 170sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- array-bytes
6.1.0 - arrayvec
0.7.4 - bandersnatch_vrfs
0.0.1 - bitflags
1.3.2 - blake2
0.10.6 - bounded-collections
0.1.8 - bs58
0.5.0 - dyn-clonable
0.9.0 - ed25519-zebra
3.1.0 - futures
0.3.28 - hash-db
0.16.0 - hash256-std-hasher
0.15.2 - impl-serde
0.4.0 - lazy_static
1.4.0 - libsecp256k1
0.7.1 - log
0.4.20 - merlin
2.0.1 - parity-scale-codec
3.6.5 - parking_lot
0.12.1 - paste
1.0.14 - primitive-types
0.12.1 - rand
0.8.5 - regex
1.9.6 - scale-info
2.9.0 - schnorrkel
0.9.1 - secp256k1
0.24.3 - secrecy
0.8.0 - serde
1.0.188 - sp-core-hashing
9.0.0 - sp-debug-derive
8.0.0 - sp-externalities
0.19.0 - sp-runtime-interface
17.0.0 - sp-std
8.0.0 - sp-storage
13.0.0 - ss58-registry
1.43.0 - substrate-bip39
0.4.4 - thiserror
1.0.49 - tiny-bip39
1.0.0 - tracing
0.1.37 - zeroize
1.6.0
used by- cumulus-client-cli
0.1.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-service
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-api
1.0.0-dev - fc-db
2.0.0-dev - fc-rpc
2.0.0-dev - fp-account
1.0.0-dev - fp-consensus
2.0.0-dev - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-remote-externalities
0.10.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - kusama-runtime-constants
1.0.0 - mmr-gadget
4.0.0-dev - mmr-rpc
4.0.0-dev - opal-runtime
1.1.0 - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-transaction-payment
0.1.1 - pallet-fungible
0.1.11 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nonfungible
0.1.14 - pallet-preimage
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-refungible
0.2.13 - pallet-session
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-xcm
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-cli
1.1.0 - polkadot-collator-protocol
1.0.0 - polkadot-core-primitives
1.0.0 - polkadot-erasure-coding
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-constants
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-table
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - rococo-runtime-constants
1.0.0 - sc-allocator
4.1.0-dev - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-executor
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-state-db
0.10.0-dev - sc-storage-monitor
0.1.0 - sc-sysinfo
6.0.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-consensus
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-io
23.0.0 - sp-keyring
24.0.0 - sp-keystore
0.27.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-offchain
4.0.0-dev - sp-rpc
6.0.0 - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-state-machine
0.28.0 - sp-statement-store
4.0.0-dev - sp-transaction-storage-proof
4.0.0-dev - sp-trie
22.0.0 - sp-weights
20.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-executor
1.0.0 - substrate-frame-rpc-system
4.0.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev - tests
0.1.1 - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0 - unique-runtime
1.1.0 - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - westend-runtime
1.0.0 - westend-runtime-constants
1.0.0
- array-bytes
sp-core-hashing
9.0.0github.com/paritytech/polkadot-sdk↘ 6↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sp-core-hashing-proc-macro
9.0.0github.com/paritytech/polkadot-sdk↘ 3↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-database
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-debug-derive
8.0.0github.com/paritytech/polkadot-sdk↘ 3↖ 6sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-externalities
0.19.0github.com/paritytech/polkadot-sdk↘ 4↖ 16sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used by- cumulus-pallet-parachain-system
0.1.0 - frame-benchmarking-cli
4.0.0-dev - polkadot-node-core-pvf-common
1.0.0 - sc-client-api
4.0.0-dev - sc-executor
0.10.0-dev - sc-offchain
4.0.0-dev - sc-service
0.10.0-dev - sp-api
4.0.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-keystore
0.27.0 - sp-runtime-interface
17.0.0 - sp-state-machine
0.28.0 - sp-statement-store
4.0.0-dev - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4
- cumulus-pallet-parachain-system
sp-genesis-builder
0.1.0github.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bysp-inherents
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 7↖ 35sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-proposer
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-primitives-timestamp
0.1.0 - fc-rpc
2.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-support
4.0.0-dev - opal-runtime
1.1.0 - pallet-timestamp
4.0.0-dev - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sp-block-builder
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-timestamp
4.0.0-dev - sp-transaction-storage-proof
4.0.0-dev - staging-kusama-runtime
1.0.0 - try-runtime-cli
0.10.0-dev - unique-node
1.1.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-client-consensus-aura
sp-io
23.0.0github.com/paritytech/polkadot-sdk↘ 17↖ 89sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-utility
0.1.0 - fc-rpc
2.0.0-dev - fc-storage
1.0.0-dev - fp-account
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-executive
4.0.0-dev - frame-remote-externalities
0.10.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - opal-runtime
1.1.0 - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-migration
0.1.1 - pallet-evm-precompile-simple
2.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - polkadot-cli
1.1.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-executor
0.10.0-dev - sc-sysinfo
6.0.0-dev - sp-application-crypto
23.0.0 - sp-consensus-beefy
4.0.0-dev - sp-runtime
24.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - tests
0.1.1 - try-runtime-cli
0.10.0-dev - unique-node
1.1.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-pallet-dmp-queue
sp-keyring
24.0.0github.com/paritytech/polkadot-sdk↘ 4↖ 4sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sp-keystore
0.27.0github.com/paritytech/polkadot-sdk↘ 5↖ 34sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - frame-benchmarking-cli
4.0.0-dev - polkadot-availability-distribution
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-primitives
1.0.0 - polkadot-rpc
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-cli
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-keystore
4.0.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-service
0.10.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-io
23.0.0 - sp-session
4.0.0-dev - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0
- cumulus-client-consensus-aura
sp-maybe-compressed-blob
4.1.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-pov-recovery
0.1.0 - polkadot-cli
1.1.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-performance-test
1.0.0 - sc-executor-common
0.10.0-dev - substrate-wasm-builder
5.0.0-dev
- cumulus-client-pov-recovery
sp-metadata-ir
0.1.0github.com/paritytech/polkadot-sdk↘ 4↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sp-mmr-primitives
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 10sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-npos-elections
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 7↖ 8sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-offchain
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 3↖ 11sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sp-panic-handler
8.0.0github.com/paritytech/polkadot-sdk↘ 3↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7sp-rpc
6.0.0github.com/paritytech/polkadot-sdk↘ 3↖ 5sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-runtime
24.0.0github.com/paritytech/polkadot-sdk↘ 15↖ 216sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- app-promotion-rpc
0.1.0 - cumulus-client-cli
0.1.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-consensus-proposer
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-client-service
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-primitives-utility
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - fc-api
1.0.0-dev - fc-consensus
2.0.0-dev - fc-db
2.0.0-dev - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - fc-storage
1.0.0-dev - fp-account
1.0.0-dev - fp-consensus
2.0.0-dev - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - fp-self-contained
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-remote-externalities
0.10.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-try-runtime
0.10.0-dev - kusama-runtime-constants
1.0.0 - mmr-gadget
4.0.0-dev - mmr-rpc
4.0.0-dev - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-transaction-payment
0.1.1 - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nonfungible
0.1.14 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parachain-info
0.1.0 - polkadot-collator-protocol
1.0.0 - polkadot-core-primitives
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-rpc
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-constants
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - rococo-runtime-constants
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-block-builder
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-epochs
0.10.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-informant
0.10.0-dev - sc-network
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-common
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-offchain
4.0.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-sync-state-rpc
0.10.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - slot-range-helper
1.0.0 - sp-api
4.0.0-dev - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-genesis-builder
0.1.0 - sp-inherents
4.0.0-dev - sp-keyring
24.0.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-offchain
4.0.0-dev - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-statement-store
4.0.0-dev - sp-timestamp
4.0.0-dev - sp-transaction-pool
4.0.0-dev - sp-transaction-storage-proof
4.0.0-dev - sp-version
22.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - substrate-frame-rpc-system
4.0.0-dev - substrate-rpc-client
0.10.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev - tests
0.1.1 - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4 - unique-node
1.1.0 - unique-runtime
1.1.0 - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - westend-runtime
1.0.0 - westend-runtime-constants
1.0.0
- app-promotion-rpc
sp-runtime-interface
17.0.0github.com/paritytech/polkadot-sdk↘ 11↖ 8sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-runtime-interface-proc-macro
11.0.0github.com/paritytech/polkadot-sdk↘ 5↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bysp-session
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 18sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- opal-runtime
1.1.0 - pallet-babe
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-rpc
4.0.0-dev - sc-service
0.10.0-dev - staging-kusama-runtime
1.0.0 - unique-node
1.1.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- opal-runtime
sp-staking
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 7↖ 23sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- frame-support
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-elections-phragmen
5.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-session
4.0.0-dev - pallet-staking
4.0.0-dev - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - polkadot-statement-distribution
1.0.0 - rococo-runtime
1.0.0 - sp-session
4.0.0-dev - staging-kusama-runtime
1.0.0 - westend-runtime
1.0.0
- frame-support
sp-state-machine
0.28.0github.com/paritytech/polkadot-sdk↘ 14↖ 30sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-proposer
0.1.0 - cumulus-client-network
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - fc-rpc
2.0.0-dev - fp-rpc
3.0.0-dev - frame-benchmarking-cli
4.0.0-dev - frame-remote-externalities
0.10.0-dev - frame-support
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-session
4.0.0-dev - polkadot-service
1.0.0 - sc-chain-spec
4.0.0-dev - sc-client-api
4.0.0-dev - sc-client-db
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-slots
0.10.0-dev - sc-service
0.10.0-dev - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-io
23.0.0 - substrate-state-trie-migration-rpc
4.0.0-dev - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4
- cumulus-client-consensus-aura
sp-statement-store
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 17↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-std
8.0.0github.com/paritytech/polkadot-sdk↘ 0↖ 159sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used by- app-promotion-rpc
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-primitives-timestamp
0.1.0 - cumulus-primitives-utility
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - fp-account
1.0.0-dev - fp-consensus
2.0.0-dev - fp-ethereum
1.0.0-dev - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-try-runtime
0.10.0-dev - opal-runtime
1.1.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-utilities
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-transaction-payment
0.1.1 - pallet-fast-unstake
4.0.0-dev - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nomination-pools-runtime-api
1.0.0-dev - pallet-nonfungible
0.1.14 - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parachain-info
0.1.0 - polkadot-core-primitives
1.0.0 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-metrics
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-sysinfo
6.0.0-dev - slot-range-helper
1.0.0 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-consensus-grandpa
4.0.0-dev - sp-consensus-slots
0.10.0-dev - sp-core
21.0.0 - sp-externalities
0.19.0 - sp-genesis-builder
0.1.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-metadata-ir
0.1.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-runtime
24.0.0 - sp-runtime-interface
17.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-state-machine
0.28.0 - sp-statement-store
4.0.0-dev - sp-storage
13.0.0 - sp-timestamp
4.0.0-dev - sp-tracing
10.0.0 - sp-transaction-storage-proof
4.0.0-dev - sp-trie
22.0.0 - sp-version
22.0.0 - sp-wasm-interface
14.0.0 - sp-weights
20.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - westend-runtime
1.0.0
- app-promotion-rpc
sp-storage
13.0.0github.com/paritytech/polkadot-sdk↘ 6↖ 20sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fc-rpc
2.0.0-dev - fc-storage
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - opal-runtime
1.1.0 - pallet-timestamp
4.0.0-dev - polkadot-runtime
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-client-api
4.0.0-dev - sc-service
0.10.0-dev - sp-core
21.0.0 - sp-externalities
0.19.0 - sp-runtime-interface
17.0.0 - staging-kusama-runtime
1.0.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-primitives-parachain-inherent
sp-timestamp
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 6↖ 12sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-primitives-timestamp
0.1.0 - fc-rpc
2.0.0-dev - pallet-timestamp
4.0.0-dev - polkadot-service
1.0.0 - sc-consensus-manual-seal
0.10.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-slots
0.10.0-dev - try-runtime-cli
0.10.0-dev - unique-node
1.1.0
- cumulus-client-consensus-aura
sp-tracing
10.0.0github.com/paritytech/polkadot-sdk↘ 5↖ 12sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used by- frame-executive
4.0.0-dev - frame-support
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-collator-selection
5.0.0 - pallet-nomination-pools
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-runtime-metrics
1.0.0 - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sp-io
23.0.0 - sp-runtime-interface
17.0.0
- frame-executive
sp-transaction-pool
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 2↖ 12sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-transaction-storage-proof
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 8↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-trie
22.0.0github.com/paritytech/polkadot-sdk↘ 16↖ 17sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-client-consensus-common
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-test-relay-sproof-builder
0.1.0 - frame-benchmarking-cli
4.0.0-dev - pallet-session
4.0.0-dev - polkadot-erasure-coding
1.0.0 - sc-client-db
0.10.0-dev - sc-executor
0.10.0-dev - sc-service
0.10.0-dev - sp-api
4.0.0-dev - sp-io
23.0.0 - sp-state-machine
0.28.0 - sp-transaction-storage-proof
4.0.0-dev - substrate-state-trie-migration-rpc
4.0.0-dev - uc-rpc
0.1.4
- cumulus-client-consensus-common
sp-version
22.0.0github.com/paritytech/polkadot-sdk↘ 10↖ 18sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-pallet-parachain-system
0.1.0 - frame-system
4.0.0-dev - opal-runtime
1.1.0 - polkadot-runtime
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - sc-cli
0.10.0-dev - sc-executor
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sp-api
4.0.0-dev - staging-kusama-runtime
1.0.0 - try-runtime-cli
0.10.0-dev - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-pallet-parachain-system
sp-version-proc-macro
8.0.0github.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bysp-wasm-interface
14.0.0github.com/paritytech/polkadot-sdk↘ 6↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsp-weights
20.0.0github.com/paritytech/polkadot-sdk↘ 8↖ 18sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- frame-support
4.0.0-dev - frame-system
4.0.0-dev - kusama-runtime-constants
1.0.0 - pallet-common
0.1.14 - pallet-evm-coder-substrate
0.1.3 - pallet-message-queue
7.0.0-dev - pallet-scheduler
4.0.0-dev - pallet-transaction-payment-rpc
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - polkadot-runtime-constants
1.0.0 - polkadot-service
1.0.0 - rococo-runtime-constants
1.0.0 - sp-runtime
24.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - try-runtime-cli
0.10.0-dev - westend-runtime-constants
1.0.0
- frame-support
spez
0.1.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc87e960f4dca2788eeb86bbdde8dd246be8948790b7618d656e68f9b720a86e8depends onspin
0.5.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042dused byspin
0.9.8crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67used byspinners
4.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum08615eea740067d9899969bc2891c68a19c315cb1f66640af9a9ecb91b13bcabdepends onspki
0.6.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212bdepends onused byspki
0.7.2crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184adepends onused byss58-registry
1.43.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5e6915280e2d0db8911e5032a5c275571af6bdded2916abd691a659be25d3439depends onused bystable_deref_trait
1.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3used bystaging-kusama-runtime
1.0.0github.com/paritytech/polkadot-sdk↘ 99↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- binary-merkle-tree
4.0.0-dev - bitvec
1.0.1 - frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - hex-literal
0.4.1 - kusama-runtime-constants
1.0.0 - log
0.4.20 - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-bounties
4.0.0-dev - pallet-child-bounties
4.0.0-dev - pallet-collective
4.0.0-dev - pallet-conviction-voting
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nis
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nomination-pools-runtime-api
1.0.0-dev - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-staking-runtime-api
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-timestamp
4.0.0-dev - pallet-tips
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-whitelist
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parity-scale-codec
3.6.5 - polkadot-primitives
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - rustc-hex
2.1.0 - scale-info
2.9.0 - serde
1.0.188 - serde_derive
1.0.188 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-arithmetic
16.0.0 - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - static_assertions
1.1.0 - substrate-wasm-builder
5.0.0-dev
- binary-merkle-tree
staging-xcm
1.0.0github.com/paritytech/polkadot-sdk↘ 10↖ 25sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-utility
0.1.0 - opal-runtime
1.1.0 - orml-traits
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-configuration
0.2.0 - pallet-foreign-assets
0.1.0 - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - tests
0.1.1 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-pallet-dmp-queue
staging-xcm-builder
1.0.0github.com/paritytech/polkadot-sdk↘ 15↖ 9sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onstaging-xcm-executor
1.0.0github.com/paritytech/polkadot-sdk↘ 13↖ 16sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-utility
0.1.0 - opal-runtime
1.1.0 - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-foreign-assets
0.1.0 - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - polkadot-runtime
1.0.0 - polkadot-runtime-parachains
1.0.0 - quartz-runtime
1.1.0 - rococo-runtime
1.0.0 - staging-kusama-runtime
1.0.0 - staging-xcm-builder
1.0.0 - unique-runtime
1.1.0 - westend-runtime
1.0.0
- cumulus-pallet-xcmp-queue
static_assertions
1.1.0crates.io↘ 0↖ 16sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543fused by- fixed-hash
0.8.0 - frame-benchmarking
4.0.0-dev - frame-support
4.0.0-dev - libp2p-noise
0.42.2 - multiaddr
0.17.1 - polkadot-runtime
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - rococo-runtime
1.0.0 - rw-stream-sink
0.3.0 - sp-arithmetic
16.0.0 - sp-runtime-interface
17.0.0 - staging-kusama-runtime
1.0.0 - twox-hash
1.6.3 - uint
0.9.5 - yamux
0.10.2
- fixed-hash
static_init
1.0.3crates.io↘ 7↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6depends onstatic_init_macro
1.0.2crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum70a2595fc3aa78f2d0e45dd425b22282dd863273761cc77780914b2cf3003acfused bystrsim
0.10.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623struct-versioning
0.1.0workspace↘ 2↖ 2depends onstrum
0.24.1crates.io↘ 1↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63fdepends onstrum_macros
0.24.3crates.io↘ 5↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59stun
0.4.4crates.io↘ 11↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25depends onsubstrate-bip39
0.4.4crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum49eee6965196b32f882dd2ee85a92b1dbead41b04e53907f269de3b0dc04733cused bysubstrate-build-script-utils
3.0.0github.com/paritytech/polkadot-sdk↘ 0↖ 3sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7substrate-frame-rpc-system
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 12↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsubstrate-prometheus-endpoint
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 5↖ 24sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used by- cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - fc-rpc
2.0.0-dev - polkadot-node-metrics
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-service
1.0.0 - sc-authority-discovery
0.10.0-dev - sc-basic-authorship
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-network
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-network-transactions
0.10.0-dev - sc-proposer-metrics
0.10.0-dev - sc-rpc-server
4.0.0-dev - sc-service
0.10.0-dev - sc-transaction-pool
4.0.0-dev - unique-node
1.1.0
- cumulus-client-consensus-aura
substrate-rpc-client
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 6↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7substrate-state-trie-migration-rpc
4.0.0-devgithub.com/paritytech/polkadot-sdk↘ 10↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bysubstrate-wasm-builder
5.0.0-devgithub.com/paritytech/polkadot-sdk↘ 11↖ 7sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onsubstring
1.4.5crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86depends onused bysubtle
2.4.1crates.io↘ 0↖ 28sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601used by- aes-gcm
0.9.4 - aes-gcm
0.10.3 - ccm
0.3.0 - crypto-bigint
0.4.9 - crypto-bigint
0.5.3 - crypto-mac
0.8.0 - crypto-mac
0.11.1 - curve25519-dalek
2.1.3 - curve25519-dalek
3.2.0 - curve25519-dalek
4.1.1 - digest
0.10.7 - elliptic-curve
0.12.3 - elliptic-curve
0.13.5 - ff
0.12.1 - ff
0.13.0 - group
0.12.1 - group
0.13.0 - libsecp256k1-core
0.3.0 - rfc6979
0.4.0 - schnorrkel
0.9.1 - sec1
0.3.0 - sec1
0.7.3 - snow
0.9.3 - stun
0.4.4 - universal-hash
0.4.1 - universal-hash
0.5.1 - webrtc-dtls
0.7.2 - webrtc-srtp
0.9.1
- aes-gcm
subtle-ng
2.5.0crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum734676eb262c623cec13c3155096e08d1f8f29adce39ba17948b18dad1e54142syn
1.0.109crates.io↘ 3↖ 42sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237used by- aquamarine
0.3.2 - ark-ff-asm
0.4.2 - ark-ff-macros
0.4.2 - ark-serialize-derive
0.4.2 - asn1-rs-derive
0.1.0 - asn1-rs-derive
0.4.0 - asn1-rs-impl
0.1.0 - auto_impl
1.1.0 - bondrewd-derive
0.3.18 - darling_core
0.14.4 - darling_macro
0.14.4 - data-encoding-macro-internal
0.1.11 - derivative
2.2.0 - derive-syn-parse
0.1.5 - derive_builder_core
0.11.2 - derive_builder_macro
0.11.2 - derive_more
0.99.17 - dyn-clonable-impl
0.9.0 - enum-as-inner
0.5.1 - evm-coder-procedural
0.4.2 - evm-coder-substrate-procedural
0.1.0 - fatality-proc-macro
0.0.6 - impl-trait-for-tuples
0.2.2 - jsonrpsee-proc-macros
0.16.3 - libp2p-swarm-derive
0.32.0 - mockall_derive
0.11.4 - multihash-derive
0.8.0 - nalgebra-macros
0.2.1 - orchestra-proc-macro
0.0.5 - parity-scale-codec-derive
3.6.5 - precompile-utils-macro
0.1.0 - prettyplease
0.1.25 - proc-macro-error
1.0.4 - prost-build
0.11.9 - prost-derive
0.11.9 - rlp-derive
0.1.0 - scale-info-derive
2.9.0 - static_init_macro
1.0.2 - struct-versioning
0.1.0 - strum_macros
0.24.3 - synstructure
0.12.6 - thiserror-core-impl
1.0.38
- aquamarine
syn
2.0.37crates.io↘ 3↖ 47sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8used by- async-recursion
1.0.5 - async-trait
0.1.73 - bindgen
0.65.1 - clap_derive
4.4.2 - cumulus-pallet-parachain-system-proc-macro
0.1.0 - curve25519-dalek-derive
0.1.0 - cxx-build
1.0.107 - cxxbridge-macro
1.0.107 - displaydoc
0.2.4 - docify_macros
0.2.4 - enumflags2_derive
0.7.8 - enumn
0.1.12 - expander
2.0.0 - frame-election-provider-solution-type
4.0.0-dev - frame-support-procedural
4.0.0-dev - frame-support-procedural-tools
4.0.0-dev - frame-support-procedural-tools-derive
3.0.0 - futures-macro
0.3.28 - macro_magic
0.4.2 - macro_magic_core
0.4.2 - macro_magic_core_macros
0.4.2 - macro_magic_macros
0.4.2 - num_enum_derive
0.7.0 - pallet-staking-reward-curve
4.0.0-dev - pest_generator
2.7.4 - pin-project-internal
1.1.3 - prettyplease
0.2.15 - proc-macro-warning
0.4.2 - prometheus-client-derive-encode
0.4.2 - ref-cast-impl
1.0.20 - sc-chain-spec-derive
4.0.0-dev - sc-tracing-proc-macro
4.0.0-dev - serde_derive
1.0.188 - sp-api-proc-macro
4.0.0-dev - sp-core-hashing-proc-macro
9.0.0 - sp-debug-derive
8.0.0 - sp-runtime-interface-proc-macro
11.0.0 - sp-version-proc-macro
8.0.0 - spez
0.1.2 - thiserror-impl
1.0.49 - tokio-macros
2.1.0 - tracing-attributes
0.1.26 - tracing-gum-proc-macro
1.0.0 - wasm-bindgen-backend
0.2.87 - wasm-bindgen-macro-support
0.2.87 - xcm-procedural
1.0.0 - zeroize_derive
1.4.2
- async-recursion
synstructure
0.12.6crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210fsystem-configuration
0.5.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7used bysystem-configuration-sys
0.5.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9depends onused bytap
1.0.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369used bytarget-lexicon
0.12.11crates.io↘ 0↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8atempfile
3.8.0crates.io↘ 5↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054eftermcolor
1.3.0crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64depends ontermtree
0.4.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76used bytests
0.1.1workspace↘ 26↖ 0depends on- evm-coder
0.4.2 - frame-support
4.0.0-dev - frame-system
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-common
0.1.14 - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-fungible
0.1.11 - pallet-nonfungible
0.1.14 - pallet-refungible
0.2.13 - pallet-structure
0.1.2 - pallet-timestamp
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-unique
0.2.1 - pallet-xcm
1.0.0 - parity-scale-codec
3.6.5 - scale-info
2.9.0 - sp-core
21.0.0 - sp-io
23.0.0 - sp-runtime
24.0.0 - sp-std
8.0.0 - staging-xcm
1.0.0 - up-data-structs
0.2.2 - up-sponsorship
0.1.0
- evm-coder
thiserror
1.0.49crates.io↘ 1↖ 129sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4depends onused by- asn1-rs
0.3.1 - asn1-rs
0.5.2 - bounded-vec
0.7.1 - cargo_metadata
0.15.4 - cumulus-client-consensus-proposer
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - fatality
0.0.6 - fatality-proc-macro
0.0.6 - fc-consensus
2.0.0-dev - fc-rpc
2.0.0-dev - frame-benchmarking-cli
4.0.0-dev - handlebars
4.4.0 - interceptor
0.8.2 - jsonrpsee-client-transport
0.16.3 - jsonrpsee-core
0.16.3 - jsonrpsee-http-client
0.16.3 - jsonrpsee-types
0.16.3 - landlock
0.2.0 - libp2p-core
0.39.2 - libp2p-identify
0.42.2 - libp2p-identity
0.1.3 - libp2p-kad
0.43.3 - libp2p-noise
0.42.2 - libp2p-quic
0.7.0-alpha.3 - libp2p-tls
0.1.0 - libp2p-webrtc
0.4.0-alpha.4 - libp2p-yamux
0.43.1 - netlink-packet-utils
0.5.2 - netlink-proto
0.10.0 - orchestra
0.0.5 - pest
2.7.4 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-cli
1.1.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-erasure-coding
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-jaeger
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-primitives
1.0.0 - polkadot-node-subsystem-types
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-performance-test
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0 - prioritized-metered-channel
0.2.0 - prometheus
0.13.3 - quick-protobuf-codec
0.1.0 - quinn-proto
0.9.5 - redox_users
0.4.3 - reed-solomon-novelpoly
1.0.2 - rtcp
0.7.2 - rtnetlink
0.10.1 - rtp
0.6.8 - sc-allocator
4.1.0-dev - sc-authority-discovery
0.10.0-dev - sc-cli
0.10.0-dev - sc-consensus
0.10.0-dev - sc-consensus-aura
0.10.0-dev - sc-consensus-babe
0.10.0-dev - sc-consensus-babe-rpc
0.10.0-dev - sc-consensus-beefy
4.0.0-dev - sc-consensus-beefy-rpc
4.0.0-dev - sc-consensus-grandpa
0.10.0-dev - sc-consensus-grandpa-rpc
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-executor-common
0.10.0-dev - sc-keystore
4.0.0-dev - sc-network
0.10.0-dev - sc-network-bitswap
0.10.0-dev - sc-network-light
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-rpc-api
0.10.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-storage-monitor
0.1.0 - sc-sync-state-rpc
0.10.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - sc-transaction-pool-api
4.0.0-dev - sdp
0.5.3 - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-keystore
0.27.0 - sp-maybe-compressed-blob
4.1.0-dev - sp-mmr-primitives
4.0.0-dev - sp-state-machine
0.28.0 - sp-statement-store
4.0.0-dev - sp-timestamp
4.0.0-dev - sp-trie
22.0.0 - sp-version
22.0.0 - stun
0.4.4 - substrate-prometheus-endpoint
0.10.0-dev - tiny-bip39
1.0.0 - trust-dns-proto
0.22.0 - trust-dns-resolver
0.22.0 - turn
0.6.1 - wasm-opt
0.114.1 - wasmtime-cranelift
8.0.1 - wasmtime-environ
8.0.1 - wasmtime-types
8.0.1 - webrtc
0.6.0 - webrtc-data
0.6.0 - webrtc-dtls
0.7.2 - webrtc-ice
0.9.1 - webrtc-mdns
0.5.2 - webrtc-media
0.5.1 - webrtc-sctp
0.7.0 - webrtc-srtp
0.9.1 - webrtc-util
0.7.0 - x509-parser
0.13.2 - x509-parser
0.14.0
- asn1-rs
thiserror-core
1.0.38crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497depends onused bythiserror-core-impl
1.0.38crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62acdepends onused bythiserror-impl
1.0.49crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4ccdepends onused bythousands
0.2.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820thread_local
1.1.7crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152depends onused bythreadpool
1.8.1crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaadepends onthrift
0.15.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb82ca8f46f95b3ce96081fe3dd89160fdea970c254bb72925255d1b62aae692eused bytikv-jemalloc-ctl
0.5.4crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum619bfed27d807b54f7f776b9430d4f8060e66ee138a28632ca898584d462c31ctikv-jemalloc-sys
0.5.4+5.3.0-patchedcrates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1depends ontime
0.3.29crates.io↘ 5↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum426f806f4089c493dcac0d24c29c01e2c38baf8e30f1b716ee37e83d200b18fetime-core
0.1.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3used bytime-macros
0.2.15crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20depends onused bytiny-bip39
1.0.0crates.io↘ 11↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861depends ontiny-keccak
2.0.2crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237depends ontinytemplate
1.2.1crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bcdepends onused bytinyvec
1.6.0crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50depends ontinyvec_macros
0.1.1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20used bytokio
1.32.0crates.io↘ 11↖ 48sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9depends onused by- cumulus-relay-chain-rpc-interface
0.1.0 - fc-rpc
2.0.0-dev - frame-remote-externalities
0.10.0-dev - h2
0.3.21 - hyper
0.14.27 - hyper-rustls
0.24.1 - if-watch
3.0.1 - interceptor
0.8.2 - jsonrpsee-client-transport
0.16.3 - jsonrpsee-core
0.16.3 - jsonrpsee-http-client
0.16.3 - jsonrpsee-server
0.16.3 - libp2p-mdns
0.43.1 - libp2p-quic
0.7.0-alpha.3 - libp2p-swarm
0.42.2 - libp2p-tcp
0.39.0 - libp2p-webrtc
0.4.0-alpha.4 - netlink-proto
0.10.0 - netlink-sys
0.8.5 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-node-jaeger
1.0.0 - rtnetlink
0.10.1 - sc-cli
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-server
4.0.0-dev - sc-rpc-spec-v2
0.10.0-dev - sc-service
0.10.0-dev - sc-storage-monitor
0.1.0 - stun
0.4.4 - substrate-prometheus-endpoint
0.10.0-dev - tokio-retry
0.3.0 - tokio-rustls
0.24.1 - tokio-stream
0.1.14 - tokio-util
0.7.9 - trust-dns-proto
0.22.0 - trust-dns-resolver
0.22.0 - turn
0.6.1 - unique-node
1.1.0 - webrtc
0.6.0 - webrtc-data
0.6.0 - webrtc-dtls
0.7.2 - webrtc-ice
0.9.1 - webrtc-mdns
0.5.2 - webrtc-sctp
0.7.0 - webrtc-srtp
0.9.1 - webrtc-util
0.7.0
- cumulus-relay-chain-rpc-interface
tokio-macros
2.1.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675edepends onused bytokio-retry
0.3.0crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214fdepends ontokio-rustls
0.24.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081depends ontokio-stream
0.1.14crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842tokio-util
0.7.9crates.io↘ 7↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60ddepends ontoml
0.5.11crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234depends onused bytoml
0.7.8crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257toml_datetime
0.6.3crates.io↘ 1↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4bdepends onused bytoml_edit
0.19.15crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421tower
0.4.13crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1ctower-http
0.4.4crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140depends onused bytower-layer
0.3.2crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0used bytower-service
0.3.2crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52tracing
0.1.37crates.io↘ 5↖ 37sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8used by- blocking
1.4.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-pov-recovery
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - cumulus-relay-chain-rpc-interface
0.1.0 - h2
0.3.21 - hyper
0.14.27 - jsonrpsee
0.16.3 - jsonrpsee-client-transport
0.16.3 - jsonrpsee-core
0.16.3 - jsonrpsee-http-client
0.16.3 - jsonrpsee-server
0.16.3 - jsonrpsee-types
0.16.3 - orchestra
0.0.5 - prioritized-metered-channel
0.2.0 - quinn-proto
0.9.5 - sc-executor
0.10.0-dev - sc-network-gossip
0.10.0-dev - sc-offchain
4.0.0-dev - sc-service
0.10.0-dev - sc-tracing
4.0.0-dev - sp-core
21.0.0 - sp-io
23.0.0 - sp-state-machine
0.28.0 - sp-tracing
10.0.0 - sp-trie
22.0.0 - tokio-util
0.7.9 - tower
0.4.13 - tracing-futures
0.2.5 - tracing-gum
1.0.0 - tracing-subscriber
0.2.25 - trust-dns-proto
0.22.0 - trust-dns-resolver
0.22.0
- blocking
tracing-attributes
0.1.26crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4abdepends onused bytracing-core
0.1.31crates.io↘ 2↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79adepends ontracing-futures
0.2.5crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2depends onused bytracing-gum
1.0.0github.com/paritytech/polkadot-sdk↘ 5↖ 31sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused by- polkadot-approval-distribution
1.0.0 - polkadot-availability-bitfield-distribution
1.0.0 - polkadot-availability-distribution
1.0.0 - polkadot-availability-recovery
1.0.0 - polkadot-collator-protocol
1.0.0 - polkadot-dispute-distribution
1.0.0 - polkadot-gossip-support
1.0.0 - polkadot-network-bridge
1.0.0 - polkadot-node-collation-generation
1.0.0 - polkadot-node-core-approval-voting
1.0.0 - polkadot-node-core-av-store
1.0.0 - polkadot-node-core-backing
1.0.0 - polkadot-node-core-bitfield-signing
1.0.0 - polkadot-node-core-candidate-validation
1.0.0 - polkadot-node-core-chain-api
1.0.0 - polkadot-node-core-chain-selection
1.0.0 - polkadot-node-core-dispute-coordinator
1.0.0 - polkadot-node-core-parachains-inherent
1.0.0 - polkadot-node-core-prospective-parachains
1.0.0 - polkadot-node-core-provisioner
1.0.0 - polkadot-node-core-pvf
1.0.0 - polkadot-node-core-pvf-checker
1.0.0 - polkadot-node-core-pvf-common
1.0.0 - polkadot-node-core-pvf-prepare-worker
1.0.0 - polkadot-node-core-runtime-api
1.0.0 - polkadot-node-metrics
1.0.0 - polkadot-node-network-protocol
1.0.0 - polkadot-node-subsystem-util
1.0.0 - polkadot-overseer
1.0.0 - polkadot-service
1.0.0 - polkadot-statement-distribution
1.0.0
- polkadot-approval-distribution
tracing-gum-proc-macro
1.0.0github.com/paritytech/polkadot-sdk↘ 5↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used bytracing-log
0.1.3crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922tracing-serde
0.1.3crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1depends onused bytracing-subscriber
0.2.25crates.io↘ 15↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71depends ontrie-db
0.27.1crates.io↘ 5↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85trie-root
0.18.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd4ed310ef5ab98f5fa467900ed906cb9232dd5376597e00fd4cba2a449d06c0bdepends onused bytriehash
0.8.4crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma1631b201eb031b563d2e85ca18ec8092508e262a3196ce9bd10a67ec87b9f5cdepends onused bytrust-dns-proto
0.22.0crates.io↘ 18↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26depends ontrust-dns-resolver
0.22.0crates.io↘ 12↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfedepends onused bytry-runtime-cli
0.10.0-devgithub.com/paritytech/polkadot-sdk↘ 29↖ 2sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- async-trait
0.1.73 - clap
4.4.6 - frame-remote-externalities
0.10.0-dev - frame-try-runtime
0.10.0-dev - hex
0.4.3 - log
0.4.20 - parity-scale-codec
3.6.5 - sc-cli
0.10.0-dev - sc-executor
0.10.0-dev - serde
1.0.188 - serde_json
1.0.107 - sp-api
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-consensus-babe
0.10.0-dev - sp-core
21.0.0 - sp-debug-derive
8.0.0 - sp-externalities
0.19.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-keystore
0.27.0 - sp-rpc
6.0.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-timestamp
4.0.0-dev - sp-transaction-storage-proof
4.0.0-dev - sp-version
22.0.0 - sp-weights
20.0.0 - substrate-rpc-client
0.10.0-dev - zstd
0.12.4
- async-trait
tt-call
1.0.9crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881dfused byturn
0.6.1crates.io↘ 11↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8depends onused bytwox-hash
1.6.3crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675typenum
1.17.0crates.io↘ 0↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825uc-rpc
0.1.4workspace↘ 28↖ 1depends on- anyhow
1.0.75 - app-promotion-rpc
0.1.0 - frame-benchmarking
4.0.0-dev - hex-literal
0.4.1 - jsonrpsee
0.16.3 - opal-runtime
1.1.0 - pallet-evm
6.0.0-dev - parity-scale-codec
3.6.5 - quartz-runtime
1.1.0 - sc-client-api
4.0.0-dev - sc-executor
0.10.0-dev - sc-rpc-api
0.10.0-dev - sc-service
0.10.0-dev - sp-api
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-core
21.0.0 - sp-externalities
0.19.0 - sp-keystore
0.27.0 - sp-runtime
24.0.0 - sp-state-machine
0.28.0 - sp-trie
22.0.0 - trie-db
0.27.1 - unique-runtime
1.1.0 - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - zstd
0.12.4
used by- anyhow
uint
0.9.5crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum76f64bba2c53b04fcab63c01a7d7427eadc821e3bc48c34dc9ba29c501164b52unicode-bidi
0.3.13crates.io↘ 0↖ 2unicode-ident
1.0.12crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4bunicode-normalization
0.1.22crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921depends onunicode-width
0.1.11crates.io↘ 0↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85unicode-xid
0.2.4crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8cunique-node
1.1.0workspace↘ 78↖ 0depends on- app-promotion-rpc
0.1.0 - clap
4.4.6 - cumulus-client-cli
0.1.0 - cumulus-client-collator
0.1.0 - cumulus-client-consensus-aura
0.1.0 - cumulus-client-consensus-common
0.1.0 - cumulus-client-consensus-proposer
0.1.0 - cumulus-client-network
0.1.0 - cumulus-client-service
0.1.0 - cumulus-primitives-aura
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-parachain-inherent
0.1.0 - cumulus-relay-chain-inprocess-interface
0.1.0 - cumulus-relay-chain-interface
0.1.0 - cumulus-relay-chain-minimal-node
0.1.0 - fc-api
1.0.0-dev - fc-consensus
2.0.0-dev - fc-db
2.0.0-dev - fc-mapping-sync
2.0.0-dev - fc-rpc
2.0.0-dev - fc-rpc-core
1.1.0-dev - fp-rpc
3.0.0-dev - fp-storage
2.0.0 - frame-benchmarking
4.0.0-dev - frame-benchmarking-cli
4.0.0-dev - futures
0.3.28 - jsonrpsee
0.16.3 - log
0.4.20 - opal-runtime
1.1.0 - pallet-transaction-payment-rpc
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - parity-scale-codec
3.6.5 - polkadot-cli
1.1.0 - polkadot-primitives
1.0.0 - polkadot-service
1.0.0 - quartz-runtime
1.1.0 - sc-basic-authorship
0.10.0-dev - sc-chain-spec
4.0.0-dev - sc-cli
0.10.0-dev - sc-client-api
4.0.0-dev - sc-consensus
0.10.0-dev - sc-consensus-manual-seal
0.10.0-dev - sc-executor
0.10.0-dev - sc-network
0.10.0-dev - sc-network-sync
0.10.0-dev - sc-rpc
4.0.0-dev - sc-rpc-api
0.10.0-dev - sc-service
0.10.0-dev - sc-sysinfo
6.0.0-dev - sc-telemetry
4.0.0-dev - sc-tracing
4.0.0-dev - sc-transaction-pool
4.0.0-dev - serde
1.0.188 - serde_json
1.0.107 - sp-api
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-blockchain
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-keystore
0.27.0 - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-timestamp
4.0.0-dev - sp-transaction-pool
4.0.0-dev - substrate-build-script-utils
3.0.0 - substrate-frame-rpc-system
4.0.0-dev - substrate-prometheus-endpoint
0.10.0-dev - tokio
1.32.0 - try-runtime-cli
0.10.0-dev - uc-rpc
0.1.4 - unique-runtime
1.1.0 - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3
- app-promotion-rpc
unique-runtime
1.1.0workspace↘ 104↖ 2depends on- app-promotion-rpc
0.1.0 - cumulus-pallet-aura-ext
0.1.0 - cumulus-pallet-dmp-queue
0.1.0 - cumulus-pallet-parachain-system
0.1.0 - cumulus-pallet-xcm
0.1.0 - cumulus-pallet-xcmp-queue
0.1.0 - cumulus-primitives-core
0.1.0 - cumulus-primitives-timestamp
0.1.0 - cumulus-primitives-utility
0.1.0 - derivative
2.2.0 - evm-coder
0.4.2 - fp-evm
3.0.0-dev - fp-rpc
3.0.0-dev - fp-self-contained
1.0.0-dev - frame-benchmarking
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - hex-literal
0.4.1 - impl-trait-for-tuples
0.2.2 - log
0.4.20 - num_enum
0.7.0 - orml-tokens
0.4.1-dev - orml-traits
0.4.1-dev - orml-vesting
0.4.1-dev - orml-xcm-support
0.4.1-dev - orml-xtokens
0.4.1-dev - pallet-app-promotion
0.2.1 - pallet-aura
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-balances-adapter
0.1.0 - pallet-base-fee
1.0.0 - pallet-collator-selection
5.0.0 - pallet-collective
4.0.0-dev - pallet-common
0.1.14 - pallet-configuration
0.2.0 - pallet-democracy
4.0.0-dev - pallet-ethereum
4.0.0-dev - pallet-evm
6.0.0-dev - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-evm-migration
0.1.1 - pallet-evm-precompile-simple
2.0.0-dev - pallet-evm-transaction-payment
0.1.1 - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-gov-origins
0.2.1 - pallet-identity
4.0.0-dev - pallet-inflation
0.1.1 - pallet-maintenance
0.1.0 - pallet-membership
4.0.0-dev - pallet-nonfungible
0.1.14 - pallet-preimage
4.0.0-dev - pallet-ranked-collective
4.0.0-dev - pallet-referenda
4.0.0-dev - pallet-refungible
0.2.13 - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-structure
0.1.2 - pallet-sudo
4.0.0-dev - pallet-template-transaction-payment
3.0.0 - pallet-test-utils
0.1.0 - pallet-timestamp
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-unique
0.2.1 - pallet-utility
4.0.0-dev - pallet-xcm
1.0.0 - parachain-info
0.1.0 - parity-scale-codec
3.6.5 - polkadot-parachain-primitives
1.0.0 - precompile-utils-macro
0.1.0 - scale-info
2.9.0 - serde
1.0.188 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-arithmetic
16.0.0 - sp-block-builder
4.0.0-dev - sp-consensus-aura
0.10.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-std
8.0.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - substrate-wasm-builder
5.0.0-dev - up-common
1.1.0 - up-data-structs
0.2.2 - up-pov-estimate-rpc
0.1.0 - up-rpc
0.1.3 - up-sponsorship
0.1.0
used by- app-promotion-rpc
universal-hash
0.4.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05depends onused byuniversal-hash
0.5.1crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07eadepends onused byunsigned-varint
0.7.2crates.io↘ 4↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105untrusted
0.7.1crates.io↘ 0↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4aup-common
1.1.0workspace↘ 9↖ 7depends onup-data-structs
0.2.2workspace↘ 12↖ 18depends onused by- opal-runtime
1.1.0 - pallet-app-promotion
0.2.1 - pallet-balances-adapter
0.1.0 - pallet-common
0.1.14 - pallet-evm-coder-substrate
0.1.3 - pallet-evm-contract-helpers
0.3.0 - pallet-foreign-assets
0.1.0 - pallet-fungible
0.1.11 - pallet-nonfungible
0.1.14 - pallet-refungible
0.2.13 - pallet-structure
0.1.2 - pallet-unique
0.2.1 - quartz-runtime
1.1.0 - tests
0.1.1 - uc-rpc
0.1.4 - unique-node
1.1.0 - unique-runtime
1.1.0 - up-rpc
0.1.3
- opal-runtime
up-pov-estimate-rpc
0.1.0workspace↘ 7↖ 6up-sponsorship
0.1.0github.com/uniquenetwork/pallet-sponsoring↘ 1↖ 7sourcegit+https://github.com/uniquenetwork/pallet-sponsoring?branch=polkadot-v1.1.0#2fbec92640f517e4812be7ed61ef7691af6e0bbadepends onurl
2.4.1crates.io↘ 3↖ 10sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5utf8parse
0.2.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370auuid
1.4.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869ddepends onused byvaluable
0.1.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6dused byvcpkg
0.2.15crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaccd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426used byversion_check
0.9.4crates.io↘ 0↖ 6sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483fvoid
1.0.2crates.io↘ 0↖ 8sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887dwaitgroup
0.1.2crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292depends onwaker-fn
1.1.1crates.io↘ 0↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690walkdir
2.4.0crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54eedepends onwant
0.3.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0edepends onused bywasi
0.9.0+wasi-snapshot-preview1crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519used bywasi
0.11.0+wasi-snapshot-preview1crates.io↘ 0↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423wasm-bindgen
0.2.87crates.io↘ 2↖ 9sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342depends onwasm-bindgen-backend
0.2.87crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abddepends onwasm-bindgen-futures
0.4.37crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03wasm-bindgen-macro
0.2.87crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1dused bywasm-bindgen-macro-support
0.2.87crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7bused bywasm-instrument
0.3.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaa1dafb3e60065305741e83db35c6c2584bb3725b692b5b66148a38d72ace6cddepends onused bywasm-opt
0.114.1crates.io↘ 8↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum4d005a95f934878a1fb446a816d51c3601a0120ff929005ba3bab3c749cfd1c7depends onwasm-opt-cxx-sys
0.114.1crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6d04e240598162810fad3b2e96fa0dec6dba1eb65a03f3bd99a9248ab8b56caaused bywasm-opt-sys
0.114.1crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2efd2aaca519d64098c4faefc8b7433a97ed511caf4c9e516384eb6aef1ff4f9wasm-timer
0.2.5crates.io↘ 7↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumbe0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7fdepends onwasmi
0.31.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1f341edb80021141d4ae6468cbeefc50798716a347d4085c3811900049ea8945used bywasmi_arena
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum401c1f35e413fac1846d4843745589d9ec678977ab35a384db8ae7830525d468used bywasmi_core
0.13.0crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856aused bywasmparser
0.102.0crates.io↘ 2↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104bdepends onwasmparser-nostd
0.100.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724depends onused bywasmtime
8.0.1crates.io↘ 20↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9depends onwasmtime-asm-macros
8.0.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810ddepends onused bywasmtime-cache
8.0.1crates.io↘ 12↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213depends onused bywasmtime-cranelift
8.0.1crates.io↘ 14↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04depends onused bywasmtime-environ
8.0.1crates.io↘ 11↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949depends onwasmtime-jit
8.0.1crates.io↘ 16↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244depends onused bywasmtime-jit-debug
8.0.1crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846depends onwasmtime-jit-icache-coherence
8.0.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumaecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbddepends onused bywasmtime-runtime
8.0.1crates.io↘ 16↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441depends onwasmtime-types
8.0.1crates.io↘ 4↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06fweb-sys
0.3.64crates.io↘ 2↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249bdepends onwebpki
0.21.4crates.io↘ 2↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4eadepends onused bywebpki
0.22.2crates.io↘ 2↖ 5sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum07ecc0cd7cac091bf682ec5efa18b1cff79d617b84181f38b3951dbe135f607fdepends onwebpki-roots
0.22.6crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87depends onused bywebpki-roots
0.23.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumb03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338depends onused bywebpki-roots
0.25.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fcwebrtc
0.6.0crates.io↘ 33↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bbdepends on- arc-swap
1.6.0 - async-trait
0.1.73 - bytes
1.5.0 - hex
0.4.3 - interceptor
0.8.2 - lazy_static
1.4.0 - log
0.4.20 - rand
0.8.5 - rcgen
0.9.3 - regex
1.9.6 - ring
0.16.20 - rtcp
0.7.2 - rtp
0.6.8 - rustls
0.19.1 - sdp
0.5.3 - serde
1.0.188 - serde_json
1.0.107 - sha2
0.10.8 - stun
0.4.4 - thiserror
1.0.49 - time
0.3.29 - tokio
1.32.0 - turn
0.6.1 - url
2.4.1 - waitgroup
0.1.2 - webrtc-data
0.6.0 - webrtc-dtls
0.7.2 - webrtc-ice
0.9.1 - webrtc-mdns
0.5.2 - webrtc-media
0.5.1 - webrtc-sctp
0.7.0 - webrtc-srtp
0.9.1 - webrtc-util
0.7.0
used by- arc-swap
webrtc-data
0.6.0crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100depends onused bywebrtc-dtls
0.7.2crates.io↘ 32↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc4a00f4242f2db33307347bd5be53263c52a0331c96c14292118c9a6bb48d267depends on- aes
0.6.0 - aes-gcm
0.10.3 - async-trait
0.1.73 - bincode
1.3.3 - block-modes
0.7.0 - byteorder
1.4.3 - ccm
0.3.0 - curve25519-dalek
3.2.0 - der-parser
8.2.0 - elliptic-curve
0.12.3 - hkdf
0.12.3 - hmac
0.12.1 - log
0.4.20 - p256
0.11.1 - p384
0.11.2 - rand
0.8.5 - rand_core
0.6.4 - rcgen
0.10.0 - ring
0.16.20 - rustls
0.19.1 - sec1
0.3.0 - serde
1.0.188 - sha1
0.10.6 - sha2
0.10.8 - signature
1.6.4 - subtle
2.4.1 - thiserror
1.0.49 - tokio
1.32.0 - webpki
0.21.4 - webrtc-util
0.7.0 - x25519-dalek
2.0.0 - x509-parser
0.13.2
used by- aes
webrtc-ice
0.9.1crates.io↘ 16↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80depends onused bywebrtc-mdns
0.5.2crates.io↘ 5↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106used bywebrtc-media
0.5.1crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991used bywebrtc-sctp
0.7.0crates.io↘ 9↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0depends onused bywebrtc-srtp
0.9.1crates.io↘ 16↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5depends onused bywebrtc-util
0.7.0crates.io↘ 13↖ 12sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87depends onwestend-runtime
1.0.0github.com/paritytech/polkadot-sdk↘ 92↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends on- binary-merkle-tree
4.0.0-dev - bitvec
1.0.1 - frame-benchmarking
4.0.0-dev - frame-election-provider-support
4.0.0-dev - frame-executive
4.0.0-dev - frame-support
4.0.0-dev - frame-system
4.0.0-dev - frame-system-benchmarking
4.0.0-dev - frame-system-rpc-runtime-api
4.0.0-dev - frame-try-runtime
0.10.0-dev - hex-literal
0.4.1 - log
0.4.20 - pallet-authority-discovery
4.0.0-dev - pallet-authorship
4.0.0-dev - pallet-babe
4.0.0-dev - pallet-bags-list
4.0.0-dev - pallet-balances
4.0.0-dev - pallet-beefy
4.0.0-dev - pallet-beefy-mmr
4.0.0-dev - pallet-collective
4.0.0-dev - pallet-democracy
4.0.0-dev - pallet-election-provider-multi-phase
4.0.0-dev - pallet-election-provider-support-benchmarking
4.0.0-dev - pallet-elections-phragmen
5.0.0-dev - pallet-fast-unstake
4.0.0-dev - pallet-grandpa
4.0.0-dev - pallet-identity
4.0.0-dev - pallet-im-online
4.0.0-dev - pallet-indices
4.0.0-dev - pallet-membership
4.0.0-dev - pallet-message-queue
7.0.0-dev - pallet-mmr
4.0.0-dev - pallet-multisig
4.0.0-dev - pallet-nomination-pools
1.0.0 - pallet-nomination-pools-benchmarking
1.0.0 - pallet-nomination-pools-runtime-api
1.0.0-dev - pallet-offences
4.0.0-dev - pallet-offences-benchmarking
4.0.0-dev - pallet-preimage
4.0.0-dev - pallet-proxy
4.0.0-dev - pallet-recovery
4.0.0-dev - pallet-scheduler
4.0.0-dev - pallet-session
4.0.0-dev - pallet-session-benchmarking
4.0.0-dev - pallet-society
4.0.0-dev - pallet-staking
4.0.0-dev - pallet-staking-reward-curve
4.0.0-dev - pallet-staking-runtime-api
4.0.0-dev - pallet-state-trie-migration
4.0.0-dev - pallet-sudo
4.0.0-dev - pallet-timestamp
4.0.0-dev - pallet-transaction-payment
4.0.0-dev - pallet-transaction-payment-rpc-runtime-api
4.0.0-dev - pallet-treasury
4.0.0-dev - pallet-utility
4.0.0-dev - pallet-vesting
4.0.0-dev - pallet-xcm
1.0.0 - pallet-xcm-benchmarks
1.0.0 - parity-scale-codec
3.6.5 - polkadot-parachain-primitives
1.0.0 - polkadot-primitives
1.0.0 - polkadot-runtime-common
1.0.0 - polkadot-runtime-parachains
1.0.0 - rustc-hex
2.1.0 - scale-info
2.9.0 - serde
1.0.188 - serde_derive
1.0.188 - smallvec
1.11.1 - sp-api
4.0.0-dev - sp-application-crypto
23.0.0 - sp-authority-discovery
4.0.0-dev - sp-block-builder
4.0.0-dev - sp-consensus-babe
0.10.0-dev - sp-consensus-beefy
4.0.0-dev - sp-core
21.0.0 - sp-inherents
4.0.0-dev - sp-io
23.0.0 - sp-mmr-primitives
4.0.0-dev - sp-npos-elections
4.0.0-dev - sp-offchain
4.0.0-dev - sp-runtime
24.0.0 - sp-session
4.0.0-dev - sp-staking
4.0.0-dev - sp-std
8.0.0 - sp-storage
13.0.0 - sp-transaction-pool
4.0.0-dev - sp-version
22.0.0 - staging-xcm
1.0.0 - staging-xcm-builder
1.0.0 - staging-xcm-executor
1.0.0 - substrate-wasm-builder
5.0.0-dev - westend-runtime-constants
1.0.0
used by- binary-merkle-tree
westend-runtime-constants
1.0.0github.com/paritytech/polkadot-sdk↘ 7↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7depends onused bywhich
4.4.2crates.io↘ 4↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7used bywide
0.7.12crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumebecebefc38ff1860b4bc47550bbfa63af5746061cf0d29fcd7fa63171602598depends onused bywidestring
1.0.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8used bywinapi
0.3.9crates.io↘ 2↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419winapi-i686-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6used bywinapi-util
0.1.6crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumf29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596depends onwinapi-x86_64-pc-windows-gnu
0.4.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183fused bywindows
0.34.0crates.io↘ 5↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829fdepends onused bywindows
0.48.0crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700fdepends onused bywindows_aarch64_gnullvm
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8used bywindows_aarch64_gnullvm
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8used bywindows_aarch64_msvc
0.34.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881dused bywindows_aarch64_msvc
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43used bywindows_aarch64_msvc
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumdc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bcused bywindows_i686_gnu
0.34.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688edused bywindows_i686_gnu
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumc61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84fused bywindows_i686_gnu
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksuma75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743eused bywindows_i686_msvc
0.34.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956used bywindows_i686_msvc
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060used bywindows_i686_msvc
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406used bywindows_x86_64_gnu
0.34.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumcfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4used bywindows_x86_64_gnu
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36used bywindows_x86_64_gnu
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718eused bywindows_x86_64_gnullvm
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3used bywindows_x86_64_gnullvm
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044ccused bywindows_x86_64_msvc
0.34.0crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumd19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9used bywindows_x86_64_msvc
0.42.2crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0used bywindows_x86_64_msvc
0.48.5crates.io↘ 0↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538used bywindows-sys
0.45.0crates.io↘ 1↖ 7sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0depends onwindows-sys
0.48.0crates.io↘ 1↖ 19sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9depends onwindows-targets
0.42.2crates.io↘ 7↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071depends onused bywindows-targets
0.48.5crates.io↘ 7↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940cdepends onwinnow
0.5.15crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefcdepends onused bywinreg
0.50.0crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1depends onused bywyz
0.5.1crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9eddepends onused byx25519-dalek
1.1.1crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4fused byx25519-dalek
2.0.0crates.io↘ 4↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumfb66477291e7e8d2b0ff1bcb900bf29489a9692816d79874bea351e7a8b6de96x509-parser
0.13.2crates.io↘ 11↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1cdepends onused byx509-parser
0.14.0crates.io↘ 10↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8depends onused byxcm-procedural
1.0.0github.com/paritytech/polkadot-sdk↘ 4↖ 1sourcegit+https://github.com/paritytech/polkadot-sdk?branch=release-polkadot-v1.1.0#f60318f68687e601c47de5ad5ca88e2c3f8139a7used byyamux
0.10.2crates.io↘ 6↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5used byyasna
0.5.2crates.io↘ 1↖ 3sourceregistry+https://github.com/rust-lang/crates.io-indexchecksume17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cddepends onzeroize
1.6.0crates.io↘ 1↖ 39sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9depends onused by- ark-ec
0.4.2 - ark-ff
0.4.2 - ark-secret-scalar
0.0.2 - bandersnatch_vrfs
0.0.1 - chacha20
0.8.2 - chacha20poly1305
0.9.1 - crypto-bigint
0.4.9 - crypto-bigint
0.5.3 - curve25519-dalek
2.1.3 - curve25519-dalek
3.2.0 - curve25519-dalek
4.1.1 - curve25519-dalek-ng
4.1.1 - der
0.6.1 - der
0.7.8 - dleq_vrf
0.0.2 - ed25519-dalek
2.0.0 - ed25519-zebra
3.1.0 - ed25519-zebra
4.0.3 - elliptic-curve
0.12.3 - elliptic-curve
0.13.5 - generic-array
0.14.7 - libp2p-identity
0.1.3 - libp2p-noise
0.42.2 - merlin
2.0.1 - merlin
3.0.0 - rfc6979
0.3.1 - sc-network
0.10.0-dev - schnorrkel
0.9.1 - schnorrkel
0.10.2 - sec1
0.3.0 - sec1
0.7.3 - secrecy
0.8.0 - smoldot
0.11.0 - smoldot-light
0.9.0 - sp-core
21.0.0 - substrate-bip39
0.4.4 - tiny-bip39
1.0.0 - x25519-dalek
1.1.1 - x25519-dalek
2.0.0
- ark-ec
zeroize_derive
1.4.2crates.io↘ 3↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69depends onused byzstd
0.11.2+zstd.1.5.2crates.io↘ 1↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4depends onused byzstd
0.12.4crates.io↘ 1↖ 4sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53cdepends onzstd-safe
5.0.2+zstd.1.5.2crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4dbdepends onused byzstd-safe
6.0.6crates.io↘ 2↖ 1sourceregistry+https://github.com/rust-lang/crates.io-indexchecksumee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581depends onused byzstd-sys
2.0.8+zstd.1.5.5crates.io↘ 3↖ 2sourceregistry+https://github.com/rust-lang/crates.io-indexchecksum5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8cdepends on
Cargo.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"] }
js-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++;
}
js-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) => {
js-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');
- });
-});
js-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');
- });
-});
js-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');
- });
-});
js-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');
- });
-});
js-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');
- });
-});
js-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');
- });
-});
js-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');
- });
-});
js-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++})));
- });
- });
-});
js-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]);
- });
- });
-});
js-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',
js-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');
- });
-
-});
js-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/);
- });
-});
js-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));
- });
-});
js-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);
- });
-});
js-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');
- });
-});
js-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(),
- };
-}
js-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);
- });
- }));
-});
js-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/);
- });
- }));
-});
js-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/);
- });
-});
js-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));
- });
-});
js-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);
- });
- }));
-});
js-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;
- });
-});
js-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$/);
- });
-});
js-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",
js-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);
js-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');
+ });
+});
js-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');
+ });
+});
js-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');
+ });
+});
js-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');
+ });
+});
js-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');
+ });
+});
js-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');
+ });
+});
js-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');
+ });
+});
js-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++})));
+ });
+ });
+});
js-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]);
+ });
+ });
+});
js-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');
+ });
+
+});
js-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/);
+ });
+});
js-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));
+ });
+});
js-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);
+ });
+});
js-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');
+ });
+});
js-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(),
+ };
+}
js-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);
+ });
+ }));
+});
js-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/);
+ });
+ }));
+});
js-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/);
+ });
+});
js-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));
+ });
+});
js-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);
+ });
+ }));
+});
js-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;
+ });
+});
js-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$/);
+ });
+});
js-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++},
node/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();
pallets/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);
pallets/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 }
primitives/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;
runtime/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>,
+ >;
}
runtime/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 {}
runtime/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 {
runtime/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)
}
runtime/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 {
runtime/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,
runtime/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>;
runtime/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");
runtime/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> {
runtime/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(),
}]))),
runtime/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 }
runtime/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>,
+);
runtime/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 }
runtime/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 }