git.delta.rocks / unique-network / refs/commits / eb77a467ce9c

difftreelog

refactor use workspace deps

Daniel Shiposha2023-01-27parent: #acb95c7.patch.diff
in: master

40 files changed

modifiedCargo.lockdiffbeforeafterboth
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2398,26 +2398,12 @@
 
 [[package]]
 name = "ethbloom"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11da94e443c60508eb62cf256243a64da87304c2802ac2528847f79d750007ef"
-dependencies = [
- "crunchy",
- "fixed-hash 0.7.0",
- "impl-codec",
- "impl-rlp",
- "scale-info",
- "tiny-keccak",
-]
-
-[[package]]
-name = "ethbloom"
 version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c22d4b5885b6aa2fe5e8b9329fb8d232bf739e434e6b87347c63bdd00c120f60"
 dependencies = [
  "crunchy",
- "fixed-hash 0.8.0",
+ "fixed-hash",
  "impl-codec",
  "impl-rlp",
  "impl-serde",
@@ -2427,28 +2413,12 @@
 
 [[package]]
 name = "ethereum"
-version = "0.12.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23750149fe8834c0e24bb9adcbacbe06c45b9861f15df53e09f26cb7c4ab91ef"
-dependencies = [
- "bytes",
- "ethereum-types 0.13.1",
- "hash-db",
- "hash256-std-hasher",
- "rlp",
- "rlp-derive",
- "sha3 0.10.6",
- "triehash",
-]
-
-[[package]]
-name = "ethereum"
 version = "0.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6a89fb87a9e103f71b903b80b670200b54cc67a07578f070681f1fffb7396fb7"
 dependencies = [
  "bytes",
- "ethereum-types 0.14.1",
+ "ethereum-types",
  "hash-db",
  "hash256-std-hasher",
  "parity-scale-codec",
@@ -2457,21 +2427,6 @@
  "serde",
  "sha3 0.10.6",
  "triehash",
-]
-
-[[package]]
-name = "ethereum-types"
-version = "0.13.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2827b94c556145446fcce834ca86b7abf0c39a805883fe20e72c5bfdb5a0dc6"
-dependencies = [
- "ethbloom 0.12.1",
- "fixed-hash 0.7.0",
- "impl-codec",
- "impl-rlp",
- "primitive-types 0.11.1",
- "scale-info",
- "uint",
 ]
 
 [[package]]
@@ -2480,12 +2435,12 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "02d215cbf040552efcbe99a38372fe80ab9d00268e20012b79fcd0f073edd8ee"
 dependencies = [
- "ethbloom 0.13.0",
- "fixed-hash 0.8.0",
+ "ethbloom",
+ "fixed-hash",
  "impl-codec",
  "impl-rlp",
  "impl-serde",
- "primitive-types 0.12.1",
+ "primitive-types",
  "scale-info",
  "uint",
 ]
@@ -2504,13 +2459,13 @@
 dependencies = [
  "auto_impl",
  "environmental",
- "ethereum 0.14.0",
+ "ethereum",
  "evm-core",
  "evm-gasometer",
  "evm-runtime",
  "log",
  "parity-scale-codec",
- "primitive-types 0.12.1",
+ "primitive-types",
  "rlp",
  "scale-info",
  "serde",
@@ -2521,14 +2476,14 @@
 name = "evm-coder"
 version = "0.1.6"
 dependencies = [
- "ethereum 0.14.0",
+ "ethereum",
  "evm-coder-procedural",
  "evm-core",
  "frame-support",
  "hex",
  "hex-literal",
  "impl-trait-for-tuples",
- "primitive-types 0.12.1",
+ "primitive-types",
  "sha3-const",
  "similar-asserts",
  "trybuild",
@@ -2553,7 +2508,7 @@
 checksum = "64c51bec0eb68a891c2575c758eaaa1d61373fc51f7caaf216b1fb5c3fea3b5d"
 dependencies = [
  "parity-scale-codec",
- "primitive-types 0.12.1",
+ "primitive-types",
  "scale-info",
  "serde",
 ]
@@ -2567,7 +2522,7 @@
  "environmental",
  "evm-core",
  "evm-runtime",
- "primitive-types 0.12.1",
+ "primitive-types",
 ]
 
 [[package]]
@@ -2579,7 +2534,7 @@
  "auto_impl",
  "environmental",
  "evm-core",
- "primitive-types 0.12.1",
+ "primitive-types",
  "sha3 0.10.6",
 ]
 
@@ -2723,8 +2678,8 @@
 version = "2.0.0-dev"
 source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3"
 dependencies = [
- "ethereum 0.14.0",
- "ethereum-types 0.14.1",
+ "ethereum",
+ "ethereum-types",
  "evm",
  "fc-db",
  "fc-rpc-core",
@@ -2765,8 +2720,8 @@
 version = "1.1.0-dev"
 source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3"
 dependencies = [
- "ethereum 0.14.0",
- "ethereum-types 0.14.1",
+ "ethereum",
+ "ethereum-types",
  "jsonrpsee",
  "rustc-hex",
  "serde",
@@ -2838,17 +2793,6 @@
 
 [[package]]
 name = "fixed-hash"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfcf0ed7fe52a17a03854ec54a9f76d6d84508d1c0e66bc1793301c73fc8493c"
-dependencies = [
- "byteorder",
- "rustc-hex",
- "static_assertions",
-]
-
-[[package]]
-name = "fixed-hash"
 version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "835c052cb0c08c1acf6ffd71c022172e18723949c8282f2b9f27efbc51e64534"
@@ -2913,7 +2857,7 @@
 version = "2.0.0-dev"
 source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3"
 dependencies = [
- "ethereum 0.14.0",
+ "ethereum",
  "parity-scale-codec",
  "sp-core",
  "sp-runtime",
@@ -2925,8 +2869,8 @@
 version = "1.0.0-dev"
 source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3"
 dependencies = [
- "ethereum 0.14.0",
- "ethereum-types 0.14.1",
+ "ethereum",
+ "ethereum-types",
  "fp-evm",
  "frame-support",
  "num_enum",
@@ -2962,8 +2906,8 @@
 version = "3.0.0-dev"
 source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3"
 dependencies = [
- "ethereum 0.14.0",
- "ethereum-types 0.14.1",
+ "ethereum",
+ "ethereum-types",
  "fp-evm",
  "parity-scale-codec",
  "scale-info",
@@ -6123,7 +6067,7 @@
 name = "pallet-common"
 version = "0.1.13"
 dependencies = [
- "ethereum 0.14.0",
+ "ethereum",
  "evm-coder",
  "frame-benchmarking",
  "frame-support",
@@ -6250,8 +6194,8 @@
 version = "4.0.0-dev"
 source = "git+https://github.com/uniquenetwork/unique-frontier?branch=unique-polkadot-v0.9.37#02eff174cf5235971da686e5ed09f34f59a93ed3"
 dependencies = [
- "ethereum 0.14.0",
- "ethereum-types 0.14.1",
+ "ethereum",
+ "ethereum-types",
  "evm",
  "fp-consensus",
  "fp-ethereum",
@@ -6337,7 +6281,7 @@
 name = "pallet-evm-migration"
 version = "0.1.1"
 dependencies = [
- "ethereum 0.14.0",
+ "ethereum",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
@@ -7176,7 +7120,7 @@
 name = "pallet-unique"
 version = "0.2.1"
 dependencies = [
- "ethereum 0.12.0",
+ "ethereum",
  "evm-coder",
  "frame-benchmarking",
  "frame-support",
@@ -7188,7 +7132,6 @@
  "pallet-refungible",
  "parity-scale-codec",
  "scale-info",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
@@ -8827,19 +8770,6 @@
 dependencies = [
  "proc-macro2",
  "syn",
-]
-
-[[package]]
-name = "primitive-types"
-version = "0.11.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e28720988bff275df1f51b171e1b2a18c30d194c4d2b61defdacecd625a5d94a"
-dependencies = [
- "fixed-hash 0.7.0",
- "impl-codec",
- "impl-rlp",
- "scale-info",
- "uint",
 ]
 
 [[package]]
@@ -8848,7 +8778,7 @@
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9f3486ccba82358b11a77516035647c34ba167dfa53312630de83b12bd4f3d66"
 dependencies = [
- "fixed-hash 0.8.0",
+ "fixed-hash",
  "impl-codec",
  "impl-rlp",
  "impl-serde",
@@ -9498,7 +9428,6 @@
 dependencies = [
  "parity-scale-codec",
  "rmrk-traits",
- "serde",
  "sp-api",
  "sp-runtime",
  "sp-std",
@@ -11621,7 +11550,7 @@
  "merlin",
  "parity-scale-codec",
  "parking_lot 0.12.1",
- "primitive-types 0.12.1",
+ "primitive-types",
  "rand 0.8.5",
  "regex",
  "scale-info",
@@ -11883,7 +11812,7 @@
  "bytes",
  "impl-trait-for-tuples",
  "parity-scale-codec",
- "primitive-types 0.12.1",
+ "primitive-types",
  "sp-externalities",
  "sp-runtime-interface-proc-macro",
  "sp-std",
@@ -13382,6 +13311,7 @@
  "precompile-utils-macro",
  "rmrk-rpc",
  "scale-info",
+ "serde",
  "smallvec",
  "sp-api",
  "sp-arithmetic",
modifiedCargo.tomldiffbeforeafterboth
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -18,7 +18,177 @@
 panic = 'unwind'
 
 [workspace.dependencies]
+# Unique
+evm-coder = { default-features = false, path = "crates/evm-coder" }
+struct-versioning = { path = "crates/struct-versioning" }
+precompile-utils-macro = { path = "runtime/common/ethereum/precompiles/utils/macro" }
+up-common = { path = "primitives/common", default-features = false }
+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-v0.9.37" }
+uc-rpc = { path =  "client/rpc" }
+unique-rpc = { path = "node/rpc" }
+pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
+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" }
+pallet-evm-coder-substrate = { default-features = false, path = "pallets/evm-coder-substrate" }
+pallet-evm-contract-helpers = { path = "pallets/evm-contract-helpers", default-features = false }
+pallet-evm-migration = { path = "pallets/evm-migration", default-features = false }
+pallet-evm-transaction-payment = { path = "pallets/evm-transaction-payment", default-features = false }
+pallet-foreign-assets = { default-features = false, path = "pallets/foreign-assets" }
+pallet-fungible = { default-features = false, path = "pallets/fungible" }
+pallet-identity = { default-features = false, path = "pallets/identity" }
+pallet-inflation = { path = "pallets/inflation", default-features = false }
+pallet-maintenance = { default-features = false, path = "pallets/maintenance" }
+pallet-nonfungible = { default-features = false, path = "pallets/nonfungible" }
+pallet-proxy-rmrk-core = { default-features = false, path = "pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
+pallet-proxy-rmrk-equip = { default-features = false, path = "pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
+rmrk-traits = { default-features = false, path = "primitives/rmrk-traits" }
+pallet-refungible = { default-features = false, path = "pallets/refungible" }
+pallet-structure = { default-features = false, path = "pallets/structure" }
+pallet-unique = { path = "pallets/unique", default-features = false }
+pallet-unique-scheduler-v2 = { path = "pallets/scheduler-v2", default-features = false }
+pallet-test-utils = { default-features = false, path = "test-pallets/utils" }
+pallet-app-promotion = { path = "pallets/app-promotion", default-features = false }
+app-promotion-rpc = { path = "primitives/app_promotion_rpc", default-features = false }
+rmrk-rpc = { path = "primitives/rmrk-rpc", default-features = false }
+
+# Unique: Runtimes
+unique-runtime = { path = "runtime/unique" }
+quartz-runtime = { path = "runtime/quartz" }
+opal-runtime = { path = "runtime/opal" }
+
+# Frontier (Unique patches over the Parity version)
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+
+# Parity
+codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.2.2" }
+scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
+polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
+polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
+cumulus-client-cli = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-client-consensus-aura = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-client-consensus-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-client-network = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-client-service = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
+frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-randomness-collective-flip = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
+polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sp-trie = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+
+# Parity: Build utils
+substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+
+# Parity: Benchmarking
+frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+
+# Parity: Try Runtime
+try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+
+# ORML
 orml-tokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
 orml-traits = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
 orml-vesting = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
 orml-xtokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false }
+
+# Other
+smallvec = "1.6.1"
+derivative = { version = "2.2.0", features = ["use_core"] }
+serde = { default-features = false, features = ['derive'], version = "1.0.136" }
+log = { version = "0.4.16", default-features = false }
+num_enum = { version = "0.5.3", default-features = false }
+hex-literal = "0.3.4"
+impl-trait-for-tuples = "0.2.2"
+logtest = "2.0.0"
+ethereum = { version = "0.14.0", default-features = false }
+evm-core = { default-features = false, version = "0.37.0" }
+primitive-types = { version = "0.12.1", default-features = false }
+jsonrpsee = { version = "0.16.2", features = ["macros", "server"] }
modifiedclient/rpc/Cargo.tomldiffbeforeafterboth
--- a/client/rpc/Cargo.toml
+++ b/client/rpc/Cargo.toml
@@ -6,37 +6,40 @@
 
 [dependencies]
 anyhow = "1.0.57"
-app-promotion-rpc.path = "../../primitives/app_promotion_rpc"
-codec = { package = "parity-scale-codec", version = "3.1.2" }
 jsonrpsee = { version = "0.16.2", features = ["macros", "server"] }
-rmrk-rpc.path = "../../primitives/rmrk-rpc"
 trie-db = { version = "0.24.0", default-features = false }
-up-common = { default-features = false, path = "../../primitives/common" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
-up-pov-estimate-rpc = { path = "../../primitives/pov-estimate-rpc", optional = true }
-up-rpc.path = "../../primitives/rpc"
 zstd = { version = "0.11.2", default-features = false }
 
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-rpc-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-blockchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-keystore = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-trie = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
-frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+app-promotion-rpc = { workspace = true }
+rmrk-rpc = { workspace = true }
+up-common = { workspace = true }
+up-data-structs = { workspace = true }
+up-pov-estimate-rpc = { workspace = true, optional = true }
+up-rpc = { workspace = true }
 
-sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-evm = { workspace = true }
+sc-client-api = { workspace = true }
+sc-rpc-api = { default-features = false, workspace = true }
+sc-service = { workspace = true }
+sp-api = { default-features = false, workspace = true }
+sp-blockchain = { default-features = false, workspace = true }
+sp-core = { default-features = false, workspace = true }
+sp-externalities = { workspace = true }
+sp-keystore = { default-features = false, workspace = true }
+sp-runtime = { default-features = false, workspace = true }
+sp-state-machine = { workspace = true }
+sp-trie = { default-features = false, workspace = true }
+
+frame-benchmarking = { workspace = true }
+
+sc-executor = { workspace = true }
 
-opal-runtime.path = "../../runtime/opal"
-quartz-runtime = { path = "../../runtime/quartz", optional = true }
-unique-runtime = { path = "../../runtime/unique", optional = true }
+opal-runtime = { workspace = true }
+quartz-runtime = { workspace = true, optional = true }
+unique-runtime = { workspace = true, optional = true }
 
 [features]
 pov-estimate = [
modifiedcrates/evm-coder/Cargo.tomldiffbeforeafterboth
--- a/crates/evm-coder/Cargo.toml
+++ b/crates/evm-coder/Cargo.toml
@@ -7,21 +7,21 @@
 [dependencies]
 sha3-const = { version = "0.1.1", default-features = false }
 # evm-coder reexports those proc-macro
-evm-coder-procedural.path = "./procedural"
+evm-coder-procedural = { path = "./procedural" }
 # Evm uses primitive-types for H160, H256 and others
-primitive-types = { version = "0.12.1", default-features = false }
+primitive-types = { workspace = true }
 # Evm doesn't have reexports for log and others
-ethereum = { version = "0.14.0", default-features = false }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+ethereum = { workspace = true }
+frame-support = { workspace = true }
 # Error types for execution
-evm-core = { default-features = false, version = "0.37.0" }
+evm-core = { workspace = true }
 # We have tuple-heavy code in solidity.rs
-impl-trait-for-tuples = "0.2.2"
+impl-trait-for-tuples = { workspace = true }
 
 [dev-dependencies]
 # We want to assert some large binary blobs equality in tests
 hex = "0.4.3"
-hex-literal = "0.3.4"
+hex-literal = { workspace = true }
 similar-asserts = "1.4.2"
 trybuild = "1.0"
 
modifiednode/cli/Cargo.tomldiffbeforeafterboth
--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -1,6 +1,3 @@
-[build-dependencies]
-substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-
 ################################################################################
 # Package
 
@@ -24,75 +21,82 @@
 
 [dependencies]
 clap = "4.1"
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.2" }
-cumulus-client-cli = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-consensus-aura = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-consensus-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-network = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-client-service = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
 futures = '0.3.17'
-log = '0.4.17'
-opal-runtime = { path = "../../runtime/opal", optional = true }
-pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
-polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
-polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
-quartz-runtime = { path = "../../runtime/quartz", optional = true }
-sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-serde = { features = ['derive'], version = "1.0" }
+tokio = { version = "1.24", features = ["time"] }
 serde_json = "1.0"
-sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-offchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-session = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-tokio = { version = "1.24", features = ["time"] }
-try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-unique-runtime = { path = "../../runtime/unique", optional = true }
-up-common.path = "../../primitives/common"
-up-data-structs = { path = "../../primitives/data-structs", default-features = false }
 
-fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-db = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-rpc = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-rpc-core = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-rpc = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+log = { workspace = true }
+
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+cumulus-client-cli = { workspace = true }
+cumulus-client-consensus-aura = { workspace = true }
+cumulus-client-consensus-common = { workspace = true }
+cumulus-client-network = { workspace = true }
+cumulus-client-service = { workspace = true }
+cumulus-primitives-core = { workspace = true }
+cumulus-primitives-parachain-inherent = { workspace = true }
+cumulus-relay-chain-inprocess-interface = { workspace = true }
+cumulus-relay-chain-interface = { workspace = true }
+cumulus-relay-chain-minimal-node = { workspace = true }
+frame-benchmarking = { workspace = true }
+frame-benchmarking-cli = { workspace = true }
+opal-runtime = { workspace = true, optional = true }
+pallet-transaction-payment-rpc-runtime-api = { workspace = true }
+polkadot-cli = { workspace = true }
+polkadot-primitives = { workspace = true }
+polkadot-service = { workspace = true }
+quartz-runtime = { workspace = true, optional = true }
+sc-basic-authorship = { workspace = true }
+sc-chain-spec = { workspace = true }
+sc-cli = { workspace = true }
+sc-client-api = { workspace = true }
+sc-consensus = { workspace = true }
+sc-consensus-manual-seal = { workspace = true }
+sc-executor = { workspace = true }
+sc-network = { workspace = true }
+sc-service = { workspace = true }
+sc-sysinfo = { workspace = true }
+sc-telemetry = { workspace = true }
+sc-tracing = { workspace = true }
+sc-transaction-pool = { workspace = true }
+serde = { workspace = true }
+sp-api = { workspace = true }
+sp-block-builder = { workspace = true }
+sp-blockchain = { workspace = true }
+sp-consensus-aura = { workspace = true }
+sp-core = { workspace = true }
+sp-io = { workspace = true }
+sp-keystore = { workspace = true }
+sp-offchain = { workspace = true }
+sp-runtime = { workspace = true }
+sp-session = { workspace = true }
+sp-timestamp = { workspace = true }
+sp-transaction-pool = { workspace = true }
+substrate-frame-rpc-system = { workspace = true }
+substrate-prometheus-endpoint = { workspace = true }
+try-runtime-cli = { workspace = true }
+unique-runtime = { workspace = true, optional = true }
+up-common = { workspace = true }
+up-data-structs = { workspace = true }
+
+fc-consensus = { workspace = true }
+fc-db = { workspace = true }
+fc-mapping-sync = { workspace = true }
+fc-rpc = { workspace = true }
+fc-rpc-core = { workspace = true }
+fp-rpc = { workspace = true }
+
+app-promotion-rpc = { workspace = true }
+rmrk-rpc = { workspace = true }
+uc-rpc = { workspace = true }
+unique-rpc = { workspace = true }
+up-pov-estimate-rpc = { workspace = true }
+up-rpc = { workspace = true }
 
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
-rmrk-rpc.path = "../../primitives/rmrk-rpc"
-uc-rpc = { default-features = false, path = "../../client/rpc" }
-unique-rpc = { default-features = false, path = "../rpc" }
-up-pov-estimate-rpc = { path = "../../primitives/pov-estimate-rpc", default-features = false }
-up-rpc.path = "../../primitives/rpc"
+[build-dependencies]
+substrate-build-script-utils = { workspace = true }
 
 [features]
 default = ["opal-runtime"]
modifiednode/rpc/Cargo.tomldiffbeforeafterboth
--- a/node/rpc/Cargo.toml
+++ b/node/rpc/Cargo.toml
@@ -10,36 +10,36 @@
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-jsonrpsee = { version = "0.16.2", features = ["macros", "server"] }
+jsonrpsee = { workspace = true }
 # pallet-contracts-rpc = { git = 'https://github.com/paritytech/substrate', branch = 'master' }
-pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-transaction-payment-rpc = { workspace = true }
+sc-client-api = { workspace = true }
+sc-finality-grandpa = { workspace = true }
+sc-network = { workspace = true }
+sc-rpc = { workspace = true }
+sc-rpc-api = { workspace = true }
+sc-service = { workspace = true }
+sc-transaction-pool = { workspace = true }
+sp-api = { workspace = true }
+sp-block-builder = { workspace = true }
+sp-blockchain = { workspace = true }
+sp-runtime = { workspace = true }
+substrate-frame-rpc-system = { workspace = true }
 
-fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+fc-db = { workspace = true }
+fc-rpc = { workspace = true }
+fc-rpc-core = { workspace = true }
+fp-rpc = { workspace = true }
+fp-storage = { workspace = true }
 
-app-promotion-rpc.path = "../../primitives/app_promotion_rpc"
-rmrk-rpc.path = "../../primitives/rmrk-rpc"
-serde = { features = ['derive'], version = "1.0.130" }
-uc-rpc.path = "../../client/rpc"
-up-common.path = "../../primitives/common"
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
-up-pov-estimate-rpc.path = "../../primitives/pov-estimate-rpc"
-up-rpc.path = "../../primitives/rpc"
+app-promotion-rpc = { workspace = true }
+rmrk-rpc = { workspace = true }
+serde = { workspace = true }
+uc-rpc = { workspace = true }
+up-common = { workspace = true }
+up-data-structs = { workspace = true }
+up-pov-estimate-rpc = { workspace = true, default-features = true }
+up-rpc = { workspace = true }
 
 [features]
 default = []
modifiedpallets/app-promotion/Cargo.tomldiffbeforeafterboth
--- a/pallets/app-promotion/Cargo.toml
+++ b/pallets/app-promotion/Cargo.toml
@@ -40,27 +40,29 @@
 ################################################################################
 # Substrate Dependencies
 
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-evm = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
 
 ################################################################################
 # local dependencies
 
-pallet-common = { default-features = false, path = "../common" }
-pallet-configuration = { default-features = false, path = "../configuration" }
-pallet-evm-contract-helpers = { default-features = false, path = "../evm-contract-helpers" }
-pallet-evm-migration = { default-features = false, path = "../evm-migration" }
-pallet-unique = { default-features = false, path = "../unique" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+pallet-common = { workspace = true }
+pallet-configuration = { workspace = true }
+pallet-evm-contract-helpers = { workspace = true }
+pallet-evm-migration = { workspace = true }
+pallet-unique = { workspace = true }
+up-data-structs = { workspace = true }
 
 # [dev-dependencies]
 
modifiedpallets/collator-selection/Cargo.tomldiffbeforeafterboth
--- a/pallets/collator-selection/Cargo.toml
+++ b/pallets/collator-selection/Cargo.toml
@@ -12,32 +12,34 @@
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-codec = { default-features = false, features = ["derive"], package = "parity-scale-codec", version = "3.0.0" }
-log = { version = "0.4.17", default-features = false }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+log = { workspace = true }
 rand = { version = "0.8.5", features = ["std_rng"], default-features = false }
-scale-info = { version = "2.2.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.145", default-features = false }
+scale-info = { workspace = true }
+serde = { workspace = true }
 
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-configuration = { default-features = false, path = "../configuration" }
-pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-authorship = { workspace = true }
+pallet-configuration = { workspace = true }
+pallet-session = { workspace = true }
+sp-runtime = { workspace = true }
+sp-staking = { workspace = true }
+sp-std = { workspace = true }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-benchmarking = { workspace = true, optional = true }
 
 [dev-dependencies]
-pallet-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-consensus-aura = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-aura = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-timestamp = { workspace = true }
+sp-consensus-aura = { workspace = true }
+sp-core = { workspace = true }
+sp-io = { workspace = true }
+sp-runtime = { workspace = true }
+sp-tracing = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/common/Cargo.tomldiffbeforeafterboth
--- a/pallets/common/Cargo.toml
+++ b/pallets/common/Cargo.toml
@@ -5,21 +5,23 @@
 version = "0.1.13"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-ethereum = { version = "0.14.0", default-features = false }
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
-up-pov-estimate-rpc = { default-features = false, path = "../../primitives/pov-estimate-rpc" }
+ethereum = { workspace = true }
+evm-coder = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
+up-pov-estimate-rpc = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/configuration/Cargo.tomldiffbeforeafterboth
--- a/pallets/configuration/Cargo.toml
+++ b/pallets/configuration/Cargo.toml
@@ -4,17 +4,19 @@
 version = "0.1.3"
 
 [dependencies]
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-parity-scale-codec = { version = "3.2.2", features = ["derive"], default-features = false }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-smallvec = "1.6.1"
-sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-xcm = { default-features = false, git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+fp-evm = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+scale-info = { workspace = true }
+smallvec = { workspace = true }
+sp-arithmetic = { workspace = true }
+sp-core = { workspace = true }
+sp-std = { workspace = true }
+xcm = { workspace = true }
 
 [features]
 default = ["std"]
@@ -24,7 +26,7 @@
 	"frame-benchmarking/std",
 	"frame-support/std",
 	"frame-system/std",
-	"parity-scale-codec/std",
+	"codec/std",
 	"sp-arithmetic/std",
 	"sp-core/std",
 	"sp-std/std",
modifiedpallets/configuration/src/lib.rsdiffbeforeafterboth
--- a/pallets/configuration/src/lib.rs
+++ b/pallets/configuration/src/lib.rs
@@ -23,7 +23,7 @@
 	weights::{WeightToFeePolynomial, WeightToFeeCoefficients, WeightToFeeCoefficient, Weight},
 	traits::Get,
 };
-use parity_scale_codec::{Decode, Encode, MaxEncodedLen};
+use codec::{Decode, Encode, MaxEncodedLen};
 use scale_info::TypeInfo;
 use sp_arithmetic::{
 	per_things::{Perbill, PerThing},
modifiedpallets/evm-coder-substrate/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-coder-substrate/Cargo.toml
+++ b/pallets/evm-coder-substrate/Cargo.toml
@@ -5,17 +5,19 @@
 version = "0.1.3"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.2.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+evm-coder = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-evm = { workspace = true }
+sp-core = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/evm-contract-helpers/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-contract-helpers/Cargo.toml
+++ b/pallets/evm-contract-helpers/Cargo.toml
@@ -5,25 +5,27 @@
 version = "0.3.0"
 
 [dependencies]
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+scale-info = { workspace = true }
 
 # Substrate
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+sp-core = { workspace = true }
+sp-std = { workspace = true }
 
 # Unique
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
+pallet-evm = { workspace = true }
+up-sponsorship = { workspace = true }
 
 # Locals
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-pallet-common = { default-features = false, path = "../../pallets/common" }
-pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm-transaction-payment = { default-features = false, path = "../../pallets/evm-transaction-payment" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs", features = ['serde1'] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+evm-coder = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-evm-transaction-payment = { workspace = true }
+up-data-structs = { workspace = true, features = ['serde1'] }
 
 [features]
 default = ["std"]
modifiedpallets/evm-migration/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-migration/Cargo.toml
+++ b/pallets/evm-migration/Cargo.toml
@@ -5,15 +5,17 @@
 version = "0.1.1"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-ethereum = { version = "0.14.0", default-features = false }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+ethereum = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-evm = { workspace = true }
+scale-info = { workspace = true }
+sp-core = { workspace = true }
+sp-std = { workspace = true }
 
 [features]
 default = ["runtime-benchmarks", "std"]
modifiedpallets/evm-transaction-payment/Cargo.tomldiffbeforeafterboth
--- a/pallets/evm-transaction-payment/Cargo.toml
+++ b/pallets/evm-transaction-payment/Cargo.toml
@@ -5,17 +5,19 @@
 version = "0.1.1"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
+fp-evm = { workspace = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-evm = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-sponsorship = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/foreign-assets/Cargo.tomldiffbeforeafterboth
--- a/pallets/foreign-assets/Cargo.toml
+++ b/pallets/foreign-assets/Cargo.toml
@@ -5,23 +5,25 @@
 version = "0.1.0"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37", default-features = false }
-frame-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37", default-features = false }
-log = { version = "0.4.16", default-features = false }
-orml-tokens.workspace = true
-pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37", default-features = false }
-pallet-common = { default-features = false, path = "../common" }
-pallet-fungible = { default-features = false, path = "../fungible" }
-serde = { version = "1.0.136", default-features = false, optional = true }
-sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37", default-features = false }
-sp-std = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37", default-features = false }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+scale-info = { workspace = true }
+
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+log = { workspace = true }
+orml-tokens = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-common = { workspace = true }
+pallet-fungible = { workspace = true }
+serde = { workspace = true, optional = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
+xcm = { workspace = true }
+xcm-executor = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/fungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/fungible/Cargo.toml
+++ b/pallets/fungible/Cargo.toml
@@ -5,21 +5,23 @@
 version = "0.1.9"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-common = { default-features = false, path = "../common" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../evm-coder-substrate" }
-pallet-structure = { default-features = false, path = "../structure" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+evm-coder = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-structure = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/identity/Cargo.tomldiffbeforeafterboth
--- a/pallets/identity/Cargo.toml
+++ b/pallets/identity/Cargo.toml
@@ -13,22 +13,21 @@
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = [
-	"derive",
-	"max-encoded-len",
-] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec", features = ["max-encoded-len"] }
+
 enumflags2 = "0.7.4"
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { version = "4.0.0-dev", default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-sp-io = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { version = "7.0.0", default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { version = "5.0.0", default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+scale-info = { workspace = true }
+sp-io = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
 
 [dev-dependencies]
-pallet-balances = { version = "4.0.0-dev", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { version = "7.0.0", git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-balances = { workspace = true }
+sp-core = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/inflation/Cargo.tomldiffbeforeafterboth
--- a/pallets/inflation/Cargo.toml
+++ b/pallets/inflation/Cargo.toml
@@ -29,14 +29,16 @@
 try-runtime = ["frame-support/try-runtime"]
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-balances = { workspace = true }
+sp-core = { workspace = true }
+sp-io = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
modifiedpallets/maintenance/Cargo.tomldiffbeforeafterboth
--- a/pallets/maintenance/Cargo.toml
+++ b/pallets/maintenance/Cargo.toml
@@ -10,13 +10,15 @@
 version = "0.1.0"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+scale-info = { workspace = true }
+
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+sp-std = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/nonfungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/nonfungible/Cargo.toml
+++ b/pallets/nonfungible/Cargo.toml
@@ -5,21 +5,23 @@
 version = "0.1.13"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-common = { default-features = false, path = "../common" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../evm-coder-substrate" }
-pallet-structure = { default-features = false, path = "../structure" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-struct-versioning.path = "../../crates/struct-versioning"
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+evm-coder = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-structure = { workspace = true }
+scale-info = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+struct-versioning = { workspace = true }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/proxy-rmrk-core/Cargo.tomldiffbeforeafterboth
--- a/pallets/proxy-rmrk-core/Cargo.toml
+++ b/pallets/proxy-rmrk-core/Cargo.toml
@@ -5,20 +5,22 @@
 version = "0.1.2"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-common = { default-features = false, path = "../common" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
-pallet-structure = { default-features = false, path = "../../pallets/structure" }
-rmrk-traits = { default-features = false, path = "../../primitives/rmrk-traits" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+scale-info = { workspace = true }
+
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-nonfungible = { workspace = true }
+pallet-structure = { workspace = true }
+rmrk-traits = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/proxy-rmrk-equip/Cargo.tomldiffbeforeafterboth
--- a/pallets/proxy-rmrk-equip/Cargo.toml
+++ b/pallets/proxy-rmrk-equip/Cargo.toml
@@ -5,19 +5,21 @@
 version = "0.1.2"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-common = { default-features = false, path = "../common" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
-pallet-rmrk-core = { default-features = false, path = "../proxy-rmrk-core" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+scale-info = { workspace = true }
+
+frame-benchmarking = {workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-nonfungible = { workspace = true }
+pallet-proxy-rmrk-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
@@ -28,7 +30,7 @@
 	"pallet-common/std",
 	"pallet-evm/std",
 	"pallet-nonfungible/std",
-	"pallet-rmrk-core/std",
+	"pallet-proxy-rmrk-core/std",
 	"sp-runtime/std",
 	"sp-std/std",
 	"up-data-structs/std",
modifiedpallets/proxy-rmrk-equip/src/lib.rsdiffbeforeafterboth
before · pallets/proxy-rmrk-equip/src/lib.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! # RMRK Core Proxy Pallet18//!19//! A pallet used as proxy for RMRK Core (<https://rmrk-team.github.io/rmrk-substrate/#/pallets/rmrk-core>).20//!21//! - [`Config`]22//! - [`Call`]23//! - [`Pallet`]24//!25//! ## Overview26//!27//! The RMRK Equip Proxy pallet mirrors the functionality of RMRK Equip,28//! binding its externalities to Unique's own underlying structure.29//! It is purposed to mimic RMRK Equip exactly, allowing seamless integrations30//! of solutions based on RMRK.31//!32//! RMRK Equip itself contains functionality to equip NFTs, and work with Bases,33//! Parts, and Themes. See [Proxy Implementation](#proxy-implementation) for details.34//!35//! Equip Proxy is responsible for a more specific area of RMRK, and heavily relies on the Core.36//! For a more foundational description of proxy implementation, please refer to [`pallet_rmrk_core`].37//!38//! *Note*, that while RMRK itself is subject to active development and restructuring,39//! the proxy may be caught temporarily out of date.40//!41//! ### What is RMRK?42//!43//! RMRK is a set of NFT standards which compose several "NFT 2.0 lego" primitives.44//! Putting these legos together allows a user to create NFT systems of arbitrary complexity.45//!46//! Meaning, RMRK NFTs are dynamic, able to nest into each other and form a hierarchy,47//! make use of specific changeable and partially shared metadata in the form of resources,48//! and more.49//!50//! Visit RMRK documentation and repositories to learn more:51//! - Docs: <https://docs.rmrk.app/getting-started/>52//! - FAQ: <https://coda.io/@rmrk/faq>53//! - Substrate code repository: <https://github.com/rmrk-team/rmrk-substrate>54//! - RMRK spec repository: <https://github.com/rmrk-team/rmrk-spec>55//!56//! ## Terminology57//!58//! For more information on RMRK, see RMRK's own documentation.59//!60//! ### Intro to RMRK61//!62//! - **Resource:** Additional piece of metadata of an NFT usually serving to add63//! a piece of media on top of the root metadata (NFT's own), be it a different wing64//! on the root template bird or something entirely unrelated.65//!66//! - **Base:** A list of possible "components" - Parts, a combination of which can67//! be appended/equipped to/on an NFT.68//!69//! - **Part:** Something that, together with other Parts, can constitute an NFT.70//! Parts are defined in the Base to which they belong. Parts can be either71//! of the `slot` type or `fixed` type. Slots are intended for equippables.72//! Note that "part of something" and "Part of a Base" can be easily confused,73//! and so in this documentation these words are distinguished by the capital letter.74//!75//! - **Theme:** Named objects of variable => value pairs which get interpolated into76//! the Base's `themable` Parts. Themes can hold any value, but are often represented77//! in RMRK's examples as colors applied to visible Parts.78//!79//! ### Peculiarities in Unique80//!81//! - **Scoped properties:** Properties that are normally obscured from users.82//! Their purpose is to contain structured metadata that was not included in the Unique standard83//! for collections and tokens, meant to be operated on by proxies and other outliers.84//! Scoped property keys are prefixed with `some-scope:`, where `some-scope` is85//! an arbitrary keyword, like "rmrk". `:` is considered an unacceptable symbol in user-defined86//! properties, which, along with other safeguards, makes scoped ones impossible to tamper with.87//!88//! - **Auxiliary properties:** A slightly different structure of properties,89//! trading universality of use for more convenient storage, writes and access.90//! Meant to be inaccessible to end users.91//!92//! ## Proxy Implementation93//!94//! An external user is supposed to be able to utilize this proxy as they would95//! utilize RMRK, and get exactly the same results. Normally, Unique transactions96//! are off-limits to RMRK collections and tokens, and vice versa. However,97//! the information stored on chain can be freely interpreted by storage reads and Unique RPCs.98//!99//! ### ID Mapping100//!101//! RMRK's collections' IDs are counted independently of Unique's and start at 0.102//! Note that tokens' IDs still start at 1.103//! The collections themselves, as well as tokens, are stored as Unique collections,104//! and thus RMRK IDs are mapped to Unique IDs (but not vice versa).105//!106//! ### External/Internal Collection Insulation107//!108//! A Unique transaction cannot target collections purposed for RMRK,109//! and they are flagged as `external` to specify that. On the other hand,110//! due to the mapping, RMRK transactions and RPCs simply cannot reach Unique collections.111//!112//! ### Native Properties113//!114//! Many of RMRK's native parameters are stored as scoped properties of a collection115//! or an NFT on the chain. Scoped properties are prefixed with `rmrk:`, where `:`116//! is an unacceptable symbol in user-defined properties, which, along with other safeguards,117//! makes them impossible to tamper with.118//!119//! ### Collection and NFT Types, or Base, Parts and Themes Handling120//!121//! RMRK introduces the concept of a Base, which is a catalogue of Parts,122//! possible components of an NFT. Due to its similarity with the functionality123//! of a token collection, a Base is stored and handled as one, and the Base's Parts and Themes124//! are this collection's NFTs. See [`CollectionType`] and [`NftType`].125//!126//! ## Interface127//!128//! ### Dispatchables129//!130//! - `create_base` - Create a new Base.131//! - `theme_add` - Add a Theme to a Base.132//! - `equippable` - Update the array of Collections allowed to be equipped to a Base's specified Slot Part.133134#![cfg_attr(not(feature = "std"), no_std)]135136use frame_support::{pallet_prelude::*, BoundedVec, dispatch::DispatchResult};137use frame_system::{pallet_prelude::*, ensure_signed};138use sp_runtime::DispatchError;139use up_data_structs::*;140use pallet_common::{Pallet as PalletCommon, Error as CommonError};141use pallet_rmrk_core::{142	Pallet as PalletCore, Error as CoreError,143	misc::{self, *},144	property::RmrkProperty::*,145};146use pallet_nonfungible::{Pallet as PalletNft, NonfungibleHandle};147use pallet_evm::account::CrossAccountId;148use weights::WeightInfo;149150pub use pallet::*;151152#[cfg(feature = "runtime-benchmarks")]153pub mod benchmarking;154pub mod rpc;155pub mod weights;156157pub type SelfWeightOf<T> = <T as Config>::WeightInfo;158159#[frame_support::pallet]160pub mod pallet {161	use super::*;162163	#[pallet::config]164	pub trait Config: frame_system::Config + pallet_rmrk_core::Config {165		/// Overarching event type.166		type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;167168		/// The weight information of this pallet.169		type WeightInfo: WeightInfo;170	}171172	/// Map of a Base ID and a Part ID to an NFT in the Base collection serving as the Part.173	#[pallet::storage]174	#[pallet::getter(fn internal_part_id)]175	pub type InernalPartId<T: Config> =176		StorageDoubleMap<_, Twox64Concat, CollectionId, Twox64Concat, RmrkPartId, TokenId>;177178	/// Checkmark that a Base has a Theme NFT named "default".179	#[pallet::storage]180	#[pallet::getter(fn base_has_default_theme)]181	pub type BaseHasDefaultTheme<T: Config> =182		StorageMap<_, Twox64Concat, CollectionId, bool, ValueQuery>;183184	#[pallet::pallet]185	#[pallet::generate_store(pub(super) trait Store)]186	pub struct Pallet<T>(_);187188	#[pallet::event]189	#[pallet::generate_deposit(pub(super) fn deposit_event)]190	pub enum Event<T: Config> {191		BaseCreated {192			issuer: T::AccountId,193			base_id: RmrkBaseId,194		},195		EquippablesUpdated {196			base_id: RmrkBaseId,197			slot_id: RmrkSlotId,198		},199	}200201	#[pallet::error]202	pub enum Error<T> {203		/// No permission to perform action.204		PermissionError,205		/// Could not find an ID for a Base collection. It is likely there were too many collections created on the chain, causing an overflow.206		NoAvailableBaseId,207		/// Could not find a suitable ID for a Part, likely too many Part tokens were created in the Base, causing an overflow208		NoAvailablePartId,209		/// Base collection linked to this ID does not exist.210		BaseDoesntExist,211		/// No Theme named "default" is associated with the Base.212		NeedsDefaultThemeFirst,213		/// Part linked to this ID does not exist.214		PartDoesntExist,215		/// Cannot assign equippables to a fixed Part.216		NoEquippableOnFixedPart,217	}218219	#[pallet::call]220	impl<T: Config> Pallet<T> {221		/// Create a new Base.222		///223		/// Modeled after the [Base interaction](https://github.com/rmrk-team/rmrk-spec/blob/master/standards/rmrk2.0.0/interactions/base.md)224		///225		/// # Permissions226		/// - Anyone - will be assigned as the issuer of the Base.227		///228		/// # Arguments:229		/// - `origin`: Caller, will be assigned as the issuer of the Base230		/// - `base_type`: Arbitrary media type, e.g. "svg".231		/// - `symbol`: Arbitrary client-chosen symbol.232		/// - `parts`: Array of Fixed and Slot Parts composing the Base,233		/// confined in length by [`RmrkPartsLimit`](up_data_structs::RmrkPartsLimit).234		#[pallet::call_index(0)]235		#[pallet::weight(<SelfWeightOf<T>>::create_base(parts.len() as u32))]236		pub fn create_base(237			origin: OriginFor<T>,238			base_type: RmrkString,239			symbol: RmrkBaseSymbol,240			parts: BoundedVec<RmrkPartType, RmrkPartsLimit>,241		) -> DispatchResult {242			let sender = ensure_signed(origin)?;243			let cross_sender = T::CrossAccountId::from_sub(sender.clone());244245			let data = CreateCollectionData {246				limits: None,247				token_prefix: symbol248					.into_inner()249					.try_into()250					.map_err(|_| <CommonError<T>>::CollectionTokenPrefixLimitExceeded)?,251				..Default::default()252			};253254			let collection_id_res = <PalletNft<T>>::init_collection(255				cross_sender.clone(),256				cross_sender.clone(),257				data,258				up_data_structs::CollectionFlags {259					external: true,260					..Default::default()261				},262			);263264			if let Err(DispatchError::Arithmetic(_)) = &collection_id_res {265				return Err(<Error<T>>::NoAvailableBaseId.into());266			}267268			let collection_id = collection_id_res?;269270			<PalletCommon<T>>::set_scoped_collection_properties(271				collection_id,272				PropertyScope::Rmrk,273				[274					<PalletCore<T>>::encode_rmrk_property(275						CollectionType,276						&misc::CollectionType::Base,277					)?,278					<PalletCore<T>>::encode_rmrk_property(BaseType, &base_type)?,279				]280				.into_iter(),281			)?;282283			let collection = <PalletCore<T>>::get_nft_collection(collection_id)?;284285			for part in parts {286				Self::create_part(&cross_sender, &collection, part)?;287			}288289			Self::deposit_event(Event::BaseCreated {290				issuer: sender,291				base_id: collection_id.0,292			});293294			Ok(())295		}296297		/// Add a Theme to a Base.298		/// A Theme named "default" is required prior to adding other Themes.299		///300		/// Modeled after [Themeadd interaction](https://github.com/rmrk-team/rmrk-spec/blob/master/standards/rmrk2.0.0/interactions/themeadd.md).301		///302		/// # Permissions:303		/// - Base issuer304		///305		/// # Arguments:306		/// - `origin`: sender of the transaction307		/// - `base_id`: Base ID containing the Theme to be updated.308		/// - `theme`: Theme to add to the Base.  A Theme has a name and properties, which are an309		///   array of [key, value, inherit].310		///   - `key`: Arbitrary BoundedString, defined by client.311		///   - `value`: Arbitrary BoundedString, defined by client.312		///   - `inherit`: Optional bool.313		#[pallet::call_index(1)]314		#[pallet::weight(<SelfWeightOf<T>>::theme_add(theme.properties.len() as u32))]315		pub fn theme_add(316			origin: OriginFor<T>,317			base_id: RmrkBaseId,318			theme: RmrkBoundedTheme,319		) -> DispatchResult {320			let sender = ensure_signed(origin)?;321322			let sender = T::CrossAccountId::from_sub(sender);323			let owner = &sender;324325			let collection_id: CollectionId = base_id.into();326327			let collection = Self::get_base(collection_id)?;328329			if theme.name.as_slice() == b"default" {330				<BaseHasDefaultTheme<T>>::insert(collection_id, true);331			} else if !Self::base_has_default_theme(collection_id) {332				return Err(<Error<T>>::NeedsDefaultThemeFirst.into());333			}334335			let token_id = <PalletCore<T>>::create_nft(336				&sender,337				owner,338				&collection,339				[340					<PalletCore<T>>::encode_rmrk_property(TokenType, &NftType::Theme)?,341					<PalletCore<T>>::encode_rmrk_property(ThemeName, &theme.name)?,342					<PalletCore<T>>::encode_rmrk_property(ThemeInherit, &theme.inherit)?,343				]344				.into_iter(),345			)346			.map_err(|_| <Error<T>>::PermissionError)?;347348			for property in theme.properties {349				<PalletNft<T>>::set_scoped_token_property(350					collection_id,351					token_id,352					PropertyScope::Rmrk,353					<PalletCore<T>>::encode_rmrk_property(354						UserProperty(property.key.as_slice()),355						&property.value,356					)?,357				)?;358			}359360			Ok(())361		}362363		/// Update the array of Collections allowed to be equipped to a Base's specified Slot Part.364		///365		/// Modeled after [equippable interaction](https://github.com/rmrk-team/rmrk-spec/blob/master/standards/rmrk2.0.0/interactions/equippable.md).366		///367		/// # Permissions:368		/// - Base issuer369		///370		/// # Arguments:371		/// - `origin`: sender of the transaction372		/// - `base_id`: Base containing the Slot Part to be updated.373		/// - `slot_id`: Slot Part whose Equippable List is being updated .374		/// - `equippables`: List of equippables that will override the current Equippables list.375		#[pallet::call_index(2)]376		#[pallet::weight(<SelfWeightOf<T>>::equippable())]377		pub fn equippable(378			origin: OriginFor<T>,379			base_id: RmrkBaseId,380			slot_id: RmrkSlotId,381			equippables: RmrkEquippableList,382		) -> DispatchResult {383			let sender = ensure_signed(origin)?;384385			let base_collection_id = base_id.into();386			let collection = Self::get_base(base_collection_id)?;387388			<PalletCore<T>>::check_collection_owner(389				&collection,390				&T::CrossAccountId::from_sub(sender),391			)392			.map_err(|err| {393				if err == <CoreError<T>>::NoPermission.into() {394					<Error<T>>::PermissionError.into()395				} else {396					err397				}398			})?;399400			let part_id = Self::internal_part_id(base_collection_id, slot_id)401				.ok_or(<Error<T>>::PartDoesntExist)?;402403			let nft_type = <PalletCore<T>>::get_nft_type(base_collection_id, part_id)404				.map_err(|_| <Error<T>>::PartDoesntExist)?;405406			match nft_type {407				NftType::Regular | NftType::Theme => return Err(<Error<T>>::PermissionError.into()),408				NftType::FixedPart => return Err(<Error<T>>::NoEquippableOnFixedPart.into()),409				NftType::SlotPart => {410					<PalletNft<T>>::set_scoped_token_property(411						base_collection_id,412						part_id,413						PropertyScope::Rmrk,414						<PalletCore<T>>::encode_rmrk_property(EquippableList, &equippables)?,415					)?;416				}417			}418419			Self::deposit_event(Event::EquippablesUpdated { base_id, slot_id });420421			Ok(())422		}423	}424}425426impl<T: Config> Pallet<T> {427	/// Create (or overwrite) a Part in a Base.428	/// The Part and the Base are represented as an NFT and a Collection.429	fn create_part(430		sender: &T::CrossAccountId,431		collection: &NonfungibleHandle<T>,432		part: RmrkPartType,433	) -> DispatchResult {434		let owner = sender;435436		let part_id = part.id();437		let src = part.src();438		let z_index = part.z_index();439440		let nft_type = match part {441			RmrkPartType::FixedPart(_) => NftType::FixedPart,442			RmrkPartType::SlotPart(_) => NftType::SlotPart,443		};444445		let token_id = match Self::internal_part_id(collection.id, part_id) {446			Some(token_id) => token_id,447			None => {448				let token_id =449					<PalletCore<T>>::create_nft(sender, owner, collection, [].into_iter())450						.map_err(|err| match err {451							DispatchError::Arithmetic(_) => <Error<T>>::NoAvailablePartId.into(),452							err => err,453						})?;454455				<InernalPartId<T>>::insert(collection.id, part_id, token_id);456457				<PalletNft<T>>::set_scoped_token_property(458					collection.id,459					token_id,460					PropertyScope::Rmrk,461					<PalletCore<T>>::encode_rmrk_property(ExternalPartId, &part_id)?,462				)?;463464				token_id465			}466		};467468		<PalletNft<T>>::set_scoped_token_properties(469			collection.id,470			token_id,471			PropertyScope::Rmrk,472			[473				<PalletCore<T>>::encode_rmrk_property(TokenType, &nft_type)?,474				<PalletCore<T>>::encode_rmrk_property(Src, &src)?,475				<PalletCore<T>>::encode_rmrk_property(ZIndex, &z_index)?,476			]477			.into_iter(),478		)?;479480		if let RmrkPartType::SlotPart(part) = part {481			<PalletNft<T>>::set_scoped_token_property(482				collection.id,483				token_id,484				PropertyScope::Rmrk,485				<PalletCore<T>>::encode_rmrk_property(EquippableList, &part.equippable)?,486			)?;487		}488489		Ok(())490	}491492	/// Ensure that the collection under the Base ID is a Base collection,493	/// and fetch it.494	fn get_base(base_id: CollectionId) -> Result<NonfungibleHandle<T>, DispatchError> {495		let collection =496			<PalletCore<T>>::get_typed_nft_collection(base_id, misc::CollectionType::Base)497				.map_err(|err| {498					if err == <CoreError<T>>::CollectionUnknown.into() {499						<Error<T>>::BaseDoesntExist.into()500					} else {501						err502					}503				})?;504		collection.check_is_external()?;505506		Ok(collection)507	}508}
after · pallets/proxy-rmrk-equip/src/lib.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! # RMRK Core Proxy Pallet18//!19//! A pallet used as proxy for RMRK Core (<https://rmrk-team.github.io/rmrk-substrate/#/pallets/rmrk-core>).20//!21//! - [`Config`]22//! - [`Call`]23//! - [`Pallet`]24//!25//! ## Overview26//!27//! The RMRK Equip Proxy pallet mirrors the functionality of RMRK Equip,28//! binding its externalities to Unique's own underlying structure.29//! It is purposed to mimic RMRK Equip exactly, allowing seamless integrations30//! of solutions based on RMRK.31//!32//! RMRK Equip itself contains functionality to equip NFTs, and work with Bases,33//! Parts, and Themes. See [Proxy Implementation](#proxy-implementation) for details.34//!35//! Equip Proxy is responsible for a more specific area of RMRK, and heavily relies on the Core.36//! For a more foundational description of proxy implementation, please refer to [`pallet_rmrk_core`].37//!38//! *Note*, that while RMRK itself is subject to active development and restructuring,39//! the proxy may be caught temporarily out of date.40//!41//! ### What is RMRK?42//!43//! RMRK is a set of NFT standards which compose several "NFT 2.0 lego" primitives.44//! Putting these legos together allows a user to create NFT systems of arbitrary complexity.45//!46//! Meaning, RMRK NFTs are dynamic, able to nest into each other and form a hierarchy,47//! make use of specific changeable and partially shared metadata in the form of resources,48//! and more.49//!50//! Visit RMRK documentation and repositories to learn more:51//! - Docs: <https://docs.rmrk.app/getting-started/>52//! - FAQ: <https://coda.io/@rmrk/faq>53//! - Substrate code repository: <https://github.com/rmrk-team/rmrk-substrate>54//! - RMRK spec repository: <https://github.com/rmrk-team/rmrk-spec>55//!56//! ## Terminology57//!58//! For more information on RMRK, see RMRK's own documentation.59//!60//! ### Intro to RMRK61//!62//! - **Resource:** Additional piece of metadata of an NFT usually serving to add63//! a piece of media on top of the root metadata (NFT's own), be it a different wing64//! on the root template bird or something entirely unrelated.65//!66//! - **Base:** A list of possible "components" - Parts, a combination of which can67//! be appended/equipped to/on an NFT.68//!69//! - **Part:** Something that, together with other Parts, can constitute an NFT.70//! Parts are defined in the Base to which they belong. Parts can be either71//! of the `slot` type or `fixed` type. Slots are intended for equippables.72//! Note that "part of something" and "Part of a Base" can be easily confused,73//! and so in this documentation these words are distinguished by the capital letter.74//!75//! - **Theme:** Named objects of variable => value pairs which get interpolated into76//! the Base's `themable` Parts. Themes can hold any value, but are often represented77//! in RMRK's examples as colors applied to visible Parts.78//!79//! ### Peculiarities in Unique80//!81//! - **Scoped properties:** Properties that are normally obscured from users.82//! Their purpose is to contain structured metadata that was not included in the Unique standard83//! for collections and tokens, meant to be operated on by proxies and other outliers.84//! Scoped property keys are prefixed with `some-scope:`, where `some-scope` is85//! an arbitrary keyword, like "rmrk". `:` is considered an unacceptable symbol in user-defined86//! properties, which, along with other safeguards, makes scoped ones impossible to tamper with.87//!88//! - **Auxiliary properties:** A slightly different structure of properties,89//! trading universality of use for more convenient storage, writes and access.90//! Meant to be inaccessible to end users.91//!92//! ## Proxy Implementation93//!94//! An external user is supposed to be able to utilize this proxy as they would95//! utilize RMRK, and get exactly the same results. Normally, Unique transactions96//! are off-limits to RMRK collections and tokens, and vice versa. However,97//! the information stored on chain can be freely interpreted by storage reads and Unique RPCs.98//!99//! ### ID Mapping100//!101//! RMRK's collections' IDs are counted independently of Unique's and start at 0.102//! Note that tokens' IDs still start at 1.103//! The collections themselves, as well as tokens, are stored as Unique collections,104//! and thus RMRK IDs are mapped to Unique IDs (but not vice versa).105//!106//! ### External/Internal Collection Insulation107//!108//! A Unique transaction cannot target collections purposed for RMRK,109//! and they are flagged as `external` to specify that. On the other hand,110//! due to the mapping, RMRK transactions and RPCs simply cannot reach Unique collections.111//!112//! ### Native Properties113//!114//! Many of RMRK's native parameters are stored as scoped properties of a collection115//! or an NFT on the chain. Scoped properties are prefixed with `rmrk:`, where `:`116//! is an unacceptable symbol in user-defined properties, which, along with other safeguards,117//! makes them impossible to tamper with.118//!119//! ### Collection and NFT Types, or Base, Parts and Themes Handling120//!121//! RMRK introduces the concept of a Base, which is a catalogue of Parts,122//! possible components of an NFT. Due to its similarity with the functionality123//! of a token collection, a Base is stored and handled as one, and the Base's Parts and Themes124//! are this collection's NFTs. See [`CollectionType`] and [`NftType`].125//!126//! ## Interface127//!128//! ### Dispatchables129//!130//! - `create_base` - Create a new Base.131//! - `theme_add` - Add a Theme to a Base.132//! - `equippable` - Update the array of Collections allowed to be equipped to a Base's specified Slot Part.133134#![cfg_attr(not(feature = "std"), no_std)]135136use frame_support::{pallet_prelude::*, BoundedVec, dispatch::DispatchResult};137use frame_system::{pallet_prelude::*, ensure_signed};138use sp_runtime::DispatchError;139use up_data_structs::*;140use pallet_common::{Pallet as PalletCommon, Error as CommonError};141use pallet_proxy_rmrk_core::{142	Pallet as PalletCore, Error as CoreError,143	misc::{self, *},144	property::RmrkProperty::*,145};146use pallet_nonfungible::{Pallet as PalletNft, NonfungibleHandle};147use pallet_evm::account::CrossAccountId;148use weights::WeightInfo;149150pub use pallet::*;151152#[cfg(feature = "runtime-benchmarks")]153pub mod benchmarking;154pub mod rpc;155pub mod weights;156157pub type SelfWeightOf<T> = <T as Config>::WeightInfo;158159#[frame_support::pallet]160pub mod pallet {161	use super::*;162163	#[pallet::config]164	pub trait Config: frame_system::Config + pallet_proxy_rmrk_core::Config {165		/// Overarching event type.166		type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;167168		/// The weight information of this pallet.169		type WeightInfo: WeightInfo;170	}171172	/// Map of a Base ID and a Part ID to an NFT in the Base collection serving as the Part.173	#[pallet::storage]174	#[pallet::getter(fn internal_part_id)]175	pub type InernalPartId<T: Config> =176		StorageDoubleMap<_, Twox64Concat, CollectionId, Twox64Concat, RmrkPartId, TokenId>;177178	/// Checkmark that a Base has a Theme NFT named "default".179	#[pallet::storage]180	#[pallet::getter(fn base_has_default_theme)]181	pub type BaseHasDefaultTheme<T: Config> =182		StorageMap<_, Twox64Concat, CollectionId, bool, ValueQuery>;183184	#[pallet::pallet]185	#[pallet::generate_store(pub(super) trait Store)]186	pub struct Pallet<T>(_);187188	#[pallet::event]189	#[pallet::generate_deposit(pub(super) fn deposit_event)]190	pub enum Event<T: Config> {191		BaseCreated {192			issuer: T::AccountId,193			base_id: RmrkBaseId,194		},195		EquippablesUpdated {196			base_id: RmrkBaseId,197			slot_id: RmrkSlotId,198		},199	}200201	#[pallet::error]202	pub enum Error<T> {203		/// No permission to perform action.204		PermissionError,205		/// Could not find an ID for a Base collection. It is likely there were too many collections created on the chain, causing an overflow.206		NoAvailableBaseId,207		/// Could not find a suitable ID for a Part, likely too many Part tokens were created in the Base, causing an overflow208		NoAvailablePartId,209		/// Base collection linked to this ID does not exist.210		BaseDoesntExist,211		/// No Theme named "default" is associated with the Base.212		NeedsDefaultThemeFirst,213		/// Part linked to this ID does not exist.214		PartDoesntExist,215		/// Cannot assign equippables to a fixed Part.216		NoEquippableOnFixedPart,217	}218219	#[pallet::call]220	impl<T: Config> Pallet<T> {221		/// Create a new Base.222		///223		/// Modeled after the [Base interaction](https://github.com/rmrk-team/rmrk-spec/blob/master/standards/rmrk2.0.0/interactions/base.md)224		///225		/// # Permissions226		/// - Anyone - will be assigned as the issuer of the Base.227		///228		/// # Arguments:229		/// - `origin`: Caller, will be assigned as the issuer of the Base230		/// - `base_type`: Arbitrary media type, e.g. "svg".231		/// - `symbol`: Arbitrary client-chosen symbol.232		/// - `parts`: Array of Fixed and Slot Parts composing the Base,233		/// confined in length by [`RmrkPartsLimit`](up_data_structs::RmrkPartsLimit).234		#[pallet::call_index(0)]235		#[pallet::weight(<SelfWeightOf<T>>::create_base(parts.len() as u32))]236		pub fn create_base(237			origin: OriginFor<T>,238			base_type: RmrkString,239			symbol: RmrkBaseSymbol,240			parts: BoundedVec<RmrkPartType, RmrkPartsLimit>,241		) -> DispatchResult {242			let sender = ensure_signed(origin)?;243			let cross_sender = T::CrossAccountId::from_sub(sender.clone());244245			let data = CreateCollectionData {246				limits: None,247				token_prefix: symbol248					.into_inner()249					.try_into()250					.map_err(|_| <CommonError<T>>::CollectionTokenPrefixLimitExceeded)?,251				..Default::default()252			};253254			let collection_id_res = <PalletNft<T>>::init_collection(255				cross_sender.clone(),256				cross_sender.clone(),257				data,258				up_data_structs::CollectionFlags {259					external: true,260					..Default::default()261				},262			);263264			if let Err(DispatchError::Arithmetic(_)) = &collection_id_res {265				return Err(<Error<T>>::NoAvailableBaseId.into());266			}267268			let collection_id = collection_id_res?;269270			<PalletCommon<T>>::set_scoped_collection_properties(271				collection_id,272				PropertyScope::Rmrk,273				[274					<PalletCore<T>>::encode_rmrk_property(275						CollectionType,276						&misc::CollectionType::Base,277					)?,278					<PalletCore<T>>::encode_rmrk_property(BaseType, &base_type)?,279				]280				.into_iter(),281			)?;282283			let collection = <PalletCore<T>>::get_nft_collection(collection_id)?;284285			for part in parts {286				Self::create_part(&cross_sender, &collection, part)?;287			}288289			Self::deposit_event(Event::BaseCreated {290				issuer: sender,291				base_id: collection_id.0,292			});293294			Ok(())295		}296297		/// Add a Theme to a Base.298		/// A Theme named "default" is required prior to adding other Themes.299		///300		/// Modeled after [Themeadd interaction](https://github.com/rmrk-team/rmrk-spec/blob/master/standards/rmrk2.0.0/interactions/themeadd.md).301		///302		/// # Permissions:303		/// - Base issuer304		///305		/// # Arguments:306		/// - `origin`: sender of the transaction307		/// - `base_id`: Base ID containing the Theme to be updated.308		/// - `theme`: Theme to add to the Base.  A Theme has a name and properties, which are an309		///   array of [key, value, inherit].310		///   - `key`: Arbitrary BoundedString, defined by client.311		///   - `value`: Arbitrary BoundedString, defined by client.312		///   - `inherit`: Optional bool.313		#[pallet::call_index(1)]314		#[pallet::weight(<SelfWeightOf<T>>::theme_add(theme.properties.len() as u32))]315		pub fn theme_add(316			origin: OriginFor<T>,317			base_id: RmrkBaseId,318			theme: RmrkBoundedTheme,319		) -> DispatchResult {320			let sender = ensure_signed(origin)?;321322			let sender = T::CrossAccountId::from_sub(sender);323			let owner = &sender;324325			let collection_id: CollectionId = base_id.into();326327			let collection = Self::get_base(collection_id)?;328329			if theme.name.as_slice() == b"default" {330				<BaseHasDefaultTheme<T>>::insert(collection_id, true);331			} else if !Self::base_has_default_theme(collection_id) {332				return Err(<Error<T>>::NeedsDefaultThemeFirst.into());333			}334335			let token_id = <PalletCore<T>>::create_nft(336				&sender,337				owner,338				&collection,339				[340					<PalletCore<T>>::encode_rmrk_property(TokenType, &NftType::Theme)?,341					<PalletCore<T>>::encode_rmrk_property(ThemeName, &theme.name)?,342					<PalletCore<T>>::encode_rmrk_property(ThemeInherit, &theme.inherit)?,343				]344				.into_iter(),345			)346			.map_err(|_| <Error<T>>::PermissionError)?;347348			for property in theme.properties {349				<PalletNft<T>>::set_scoped_token_property(350					collection_id,351					token_id,352					PropertyScope::Rmrk,353					<PalletCore<T>>::encode_rmrk_property(354						UserProperty(property.key.as_slice()),355						&property.value,356					)?,357				)?;358			}359360			Ok(())361		}362363		/// Update the array of Collections allowed to be equipped to a Base's specified Slot Part.364		///365		/// Modeled after [equippable interaction](https://github.com/rmrk-team/rmrk-spec/blob/master/standards/rmrk2.0.0/interactions/equippable.md).366		///367		/// # Permissions:368		/// - Base issuer369		///370		/// # Arguments:371		/// - `origin`: sender of the transaction372		/// - `base_id`: Base containing the Slot Part to be updated.373		/// - `slot_id`: Slot Part whose Equippable List is being updated .374		/// - `equippables`: List of equippables that will override the current Equippables list.375		#[pallet::call_index(2)]376		#[pallet::weight(<SelfWeightOf<T>>::equippable())]377		pub fn equippable(378			origin: OriginFor<T>,379			base_id: RmrkBaseId,380			slot_id: RmrkSlotId,381			equippables: RmrkEquippableList,382		) -> DispatchResult {383			let sender = ensure_signed(origin)?;384385			let base_collection_id = base_id.into();386			let collection = Self::get_base(base_collection_id)?;387388			<PalletCore<T>>::check_collection_owner(389				&collection,390				&T::CrossAccountId::from_sub(sender),391			)392			.map_err(|err| {393				if err == <CoreError<T>>::NoPermission.into() {394					<Error<T>>::PermissionError.into()395				} else {396					err397				}398			})?;399400			let part_id = Self::internal_part_id(base_collection_id, slot_id)401				.ok_or(<Error<T>>::PartDoesntExist)?;402403			let nft_type = <PalletCore<T>>::get_nft_type(base_collection_id, part_id)404				.map_err(|_| <Error<T>>::PartDoesntExist)?;405406			match nft_type {407				NftType::Regular | NftType::Theme => return Err(<Error<T>>::PermissionError.into()),408				NftType::FixedPart => return Err(<Error<T>>::NoEquippableOnFixedPart.into()),409				NftType::SlotPart => {410					<PalletNft<T>>::set_scoped_token_property(411						base_collection_id,412						part_id,413						PropertyScope::Rmrk,414						<PalletCore<T>>::encode_rmrk_property(EquippableList, &equippables)?,415					)?;416				}417			}418419			Self::deposit_event(Event::EquippablesUpdated { base_id, slot_id });420421			Ok(())422		}423	}424}425426impl<T: Config> Pallet<T> {427	/// Create (or overwrite) a Part in a Base.428	/// The Part and the Base are represented as an NFT and a Collection.429	fn create_part(430		sender: &T::CrossAccountId,431		collection: &NonfungibleHandle<T>,432		part: RmrkPartType,433	) -> DispatchResult {434		let owner = sender;435436		let part_id = part.id();437		let src = part.src();438		let z_index = part.z_index();439440		let nft_type = match part {441			RmrkPartType::FixedPart(_) => NftType::FixedPart,442			RmrkPartType::SlotPart(_) => NftType::SlotPart,443		};444445		let token_id = match Self::internal_part_id(collection.id, part_id) {446			Some(token_id) => token_id,447			None => {448				let token_id =449					<PalletCore<T>>::create_nft(sender, owner, collection, [].into_iter())450						.map_err(|err| match err {451							DispatchError::Arithmetic(_) => <Error<T>>::NoAvailablePartId.into(),452							err => err,453						})?;454455				<InernalPartId<T>>::insert(collection.id, part_id, token_id);456457				<PalletNft<T>>::set_scoped_token_property(458					collection.id,459					token_id,460					PropertyScope::Rmrk,461					<PalletCore<T>>::encode_rmrk_property(ExternalPartId, &part_id)?,462				)?;463464				token_id465			}466		};467468		<PalletNft<T>>::set_scoped_token_properties(469			collection.id,470			token_id,471			PropertyScope::Rmrk,472			[473				<PalletCore<T>>::encode_rmrk_property(TokenType, &nft_type)?,474				<PalletCore<T>>::encode_rmrk_property(Src, &src)?,475				<PalletCore<T>>::encode_rmrk_property(ZIndex, &z_index)?,476			]477			.into_iter(),478		)?;479480		if let RmrkPartType::SlotPart(part) = part {481			<PalletNft<T>>::set_scoped_token_property(482				collection.id,483				token_id,484				PropertyScope::Rmrk,485				<PalletCore<T>>::encode_rmrk_property(EquippableList, &part.equippable)?,486			)?;487		}488489		Ok(())490	}491492	/// Ensure that the collection under the Base ID is a Base collection,493	/// and fetch it.494	fn get_base(base_id: CollectionId) -> Result<NonfungibleHandle<T>, DispatchError> {495		let collection =496			<PalletCore<T>>::get_typed_nft_collection(base_id, misc::CollectionType::Base)497				.map_err(|err| {498					if err == <CoreError<T>>::CollectionUnknown.into() {499						<Error<T>>::BaseDoesntExist.into()500					} else {501						err502					}503				})?;504		collection.check_is_external()?;505506		Ok(collection)507	}508}
modifiedpallets/proxy-rmrk-equip/src/rpc.rsdiffbeforeafterboth
--- a/pallets/proxy-rmrk-equip/src/rpc.rs
+++ b/pallets/proxy-rmrk-equip/src/rpc.rs
@@ -17,7 +17,7 @@
 //! Realizations of RMRK RPCs (remote procedure calls) related to the Equip pallet.
 
 use super::*;
-use pallet_rmrk_core::{misc, property::*};
+use pallet_proxy_rmrk_core::{misc, property::*};
 use sp_std::vec::Vec;
 
 /// Get base info by its ID.
modifiedpallets/refungible/Cargo.tomldiffbeforeafterboth
--- a/pallets/refungible/Cargo.toml
+++ b/pallets/refungible/Cargo.toml
@@ -5,22 +5,24 @@
 version = "0.2.12"
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-common = { default-features = false, path = "../common" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-structure = { default-features = false, path = "../structure" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+evm-coder = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-structure = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
 
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
modifiedpallets/scheduler-v2/Cargo.tomldiffbeforeafterboth
--- a/pallets/scheduler-v2/Cargo.toml
+++ b/pallets/scheduler-v2/Cargo.toml
@@ -10,20 +10,21 @@
 version = "0.1.0"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-log = { version = "0.4.17", default-features = false }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+log = { workspace = true }
+scale-info = { workspace = true }
+sp-core = { workspace = true }
+sp-io = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+
 [dev-dependencies]
 pallet-preimage = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
 substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
 
 [features]
modifiedpallets/structure/Cargo.tomldiffbeforeafterboth
--- a/pallets/structure/Cargo.toml
+++ b/pallets/structure/Cargo.toml
@@ -4,17 +4,19 @@
 version = "0.1.2"
 
 [dependencies]
-parity-scale-codec = { version = "3.2.2", default-features = false, features = ["derive"] }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
 
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-log = { version = "0.4.17", default-features = false }
-pallet-common = { path = "../common", default-features = false }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { path = "../../primitives/data-structs", default-features = false }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+log = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
@@ -25,7 +27,7 @@
 	"frame-system/std",
 	"pallet-common/std",
 	"pallet-evm/std",
-	"parity-scale-codec/std",
+	"codec/std",
 	"scale-info/std",
 	"sp-std/std",
 	"up-data-structs/std",
modifiedpallets/unique/Cargo.tomldiffbeforeafterboth
--- a/pallets/unique/Cargo.toml
+++ b/pallets/unique/Cargo.toml
@@ -28,7 +28,6 @@
 	'pallet-evm-coder-substrate/std',
 	'pallet-evm/std',
 	'pallet-nonfungible/std',
-	'serde/std',
 	'sp-runtime/std',
 	'sp-std/std',
 	'up-data-structs/std',
@@ -39,21 +38,22 @@
 ################################################################################
 # Local Dependencies
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-ethereum = { version = "0.12.0", default-features = false }
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-common = { default-features = false, path = "../common" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
-pallet-refungible = { default-features = false, path = "../../pallets/refungible" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-serde = { default-features = false, features = ['derive'], version = "1.0.130" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { default-features = false, path = "../../primitives/data-structs" }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+ethereum = { workspace = true }
+evm-coder = { workspace = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-nonfungible = { workspace = true }
+pallet-refungible = { workspace = true }
+scale-info = { workspace = true }
+sp-core = { workspace = true }
+sp-io = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
modifiedprimitives/app_promotion_rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/app_promotion_rpc/Cargo.toml
+++ b/primitives/app_promotion_rpc/Cargo.toml
@@ -5,11 +5,11 @@
 version = "0.1.0"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = ["derive"] }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+codec = { workspace = true }
+pallet-evm = { workspace = true }
+sp-api = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
 
 [features]
 default = ["std"]
modifiedprimitives/common/Cargo.tomldiffbeforeafterboth
--- a/primitives/common/Cargo.toml
+++ b/primitives/common/Cargo.toml
@@ -22,11 +22,11 @@
 ]
 
 [dependencies]
-cumulus-primitives-core = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+cumulus-primitives-core = { workspace = true }
+fp-rpc = { workspace = true }
+frame-support = { workspace = true }
+pallet-evm = { workspace = true }
+sp-consensus-aura = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
modifiedprimitives/data-structs/Cargo.tomldiffbeforeafterboth
--- a/primitives/data-structs/Cargo.toml
+++ b/primitives/data-structs/Cargo.toml
@@ -9,18 +9,20 @@
 version = "0.2.2"
 
 [dependencies]
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+derivative = { workspace = true }
+frame-support = { workspace = true }
+pallet-evm = { workspace = true }
+rmrk-traits = { workspace = true }
+scale-info = { workspace = true }
+serde = { workspace = true, optional = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
 bondrewd = { version = "0.1.14", features = ["derive"], default-features = false }
-codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = ['derive'] }
-derivative = { version = "2.2.0", features = ["use_core"] }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-rmrk-traits = { default-features = false, path = "../rmrk-traits" }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-serde = { version = "1.0.130", features = ['derive'], default-features = false, optional = true }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-struct-versioning.path = "../../crates/struct-versioning"
+struct-versioning = { workspace = true }
 
 [features]
 default = ["std"]
modifiedprimitives/pov-estimate-rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/pov-estimate-rpc/Cargo.toml
+++ b/primitives/pov-estimate-rpc/Cargo.toml
@@ -5,13 +5,13 @@
 version = "0.1.0"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = ["derive"] }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-serde = { version = "1.0.130", features = ["derive"], default-features = false, optional = true }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+codec = { workspace = true }
+scale-info = { workspace = true }
+serde = { workspace = true, optional = true }
+sp-api = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
 
 [features]
 default = ["std"]
modifiedprimitives/rmrk-rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/rmrk-rpc/Cargo.toml
+++ b/primitives/rmrk-rpc/Cargo.toml
@@ -5,13 +5,12 @@
 version = "0.0.2"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false, features = ["derive"] }
-rmrk-traits = { default-features = false, path = "../rmrk-traits" }
-serde = { version = "1.0.130", default-features = false, features = ["derive"] }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+codec = { workspace = true }
+rmrk-traits = { workspace = true }
+sp-api = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
 
 [features]
 default = ["std"]
-std = ["codec/std", "rmrk-traits/std", "serde/std", "sp-api/std", "sp-runtime/std", "sp-std/std"]
+std = ["codec/std", "rmrk-traits/std", "sp-api/std", "sp-runtime/std", "sp-std/std"]
modifiedprimitives/rmrk-traits/Cargo.tomldiffbeforeafterboth
--- a/primitives/rmrk-traits/Cargo.toml
+++ b/primitives/rmrk-traits/Cargo.toml
@@ -1,5 +1,5 @@
 [package]
-authors = ["Unique Network <support@uniquenetwork.io>"]
+authors = ["RMRK Team", "Unique Network <support@uniquenetwork.io>"]
 description = "RMRK proxy data structs definitions"
 edition = "2021"
 homepage = "https://unique.network"
@@ -9,9 +9,11 @@
 version = "0.1.0"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = ["derive"] }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-serde = { version = "1.0.130", features = ["derive"], default-features = false, optional = true }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+scale-info = { workspace = true }
+serde = { workspace = true, optional = true }
 
 [features]
 default = ["std"]
modifiedprimitives/rpc/Cargo.tomldiffbeforeafterboth
--- a/primitives/rpc/Cargo.toml
+++ b/primitives/rpc/Cargo.toml
@@ -5,14 +5,14 @@
 version = "0.1.3"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.1.2", default-features = false, features = ["derive"] }
-pallet-common = { default-features = false, path = "../../pallets/common" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-up-data-structs = { default-features = false, path = "../data-structs" }
+codec = { workspace = true }
+pallet-common = { workspace = true }
+pallet-evm = { workspace = true }
+sp-api = { workspace = true }
+sp-core = { workspace = true }
+sp-runtime = { workspace = true }
+sp-std = { workspace = true }
+up-data-structs = { workspace = true }
 
 [features]
 default = ["std"]
modifiedruntime/opal/Cargo.tomldiffbeforeafterboth
--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -204,114 +204,120 @@
 # local dependencies
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-hex-literal = { optional = true, version = "0.3.3" }
-orml-tokens.workspace = true
-orml-traits.workspace = true
-orml-vesting.workspace = true
-orml-xtokens.workspace = true
-pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-randomness-collective-flip = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-serde = { default-features = false, features = ['derive'], optional = true, version = "1.0.130" }
-smallvec = "1.6.1"
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+cumulus-pallet-aura-ext = { workspace = true }
+cumulus-pallet-dmp-queue = { workspace = true }
+cumulus-pallet-parachain-system = { workspace = true }
+cumulus-pallet-xcm = { workspace = true }
+cumulus-pallet-xcmp-queue = { workspace = true }
+cumulus-primitives-core = { workspace = true }
+cumulus-primitives-timestamp = { workspace = true }
+cumulus-primitives-utility = { workspace = true }
+frame-executive = { workspace = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+frame-system-rpc-runtime-api = { workspace = true }
+orml-tokens = { workspace = true }
+orml-traits = { workspace = true }
+orml-vesting = { workspace = true }
+orml-xtokens = { workspace = true }
+pallet-aura = { workspace = true }
+pallet-authorship = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-randomness-collective-flip = { workspace = true }
+pallet-session = { workspace = true }
+pallet-sudo = { workspace = true }
+pallet-timestamp = { workspace = true }
+pallet-transaction-payment = { workspace = true }
+pallet-transaction-payment-rpc-runtime-api = { workspace = true }
+pallet-treasury = { workspace = true }
+pallet-xcm = { workspace = true }
+parachain-info = { workspace = true }
+polkadot-parachain = { workspace = true }
+smallvec = { workspace = true }
+sp-api = { workspace = true }
+sp-arithmetic = { workspace = true }
+sp-block-builder = { workspace = true }
+sp-consensus-aura = { workspace = true }
+sp-core = { workspace = true }
+sp-inherents = { workspace = true }
+sp-io = { workspace = true }
+sp-offchain = { workspace = true }
+sp-runtime = { workspace = true }
+sp-session = { workspace = true }
+sp-std = { workspace = true }
+sp-transaction-pool = { workspace = true }
+sp-version = { workspace = true }
+xcm = { workspace = true }
+xcm-builder = { workspace = true }
+xcm-executor = { workspace = true }
+
+app-promotion-rpc = { workspace = true }
+derivative = { workspace = true }
+evm-coder = { workspace = true }
+fp-evm = { workspace = true }
+fp-evm-mapping = { workspace = true }
+fp-rpc = { workspace = true }
+fp-self-contained = { workspace = true }
+log = { workspace = true }
+num_enum = { workspace = true }
+pallet-app-promotion = { workspace = true }
+pallet-base-fee = { workspace = true }
+pallet-charge-transaction = { workspace = true }
+pallet-collator-selection = { workspace = true }
+pallet-common = { workspace = true }
+pallet-configuration = { workspace = true }
+pallet-ethereum = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-evm-contract-helpers = { workspace = true }
+pallet-evm-migration = { workspace = true }
+pallet-evm-precompile-simple = { workspace = true }
+pallet-evm-transaction-payment = { workspace = true }
+pallet-foreign-assets = { workspace = true }
+pallet-fungible = { workspace = true }
+pallet-identity = { workspace = true }
+pallet-inflation = { workspace = true }
+pallet-maintenance = { workspace = true }
+pallet-nonfungible = { workspace = true }
+pallet-proxy-rmrk-core = { workspace = true }
+pallet-proxy-rmrk-equip = { workspace = true }
+pallet-refungible = { workspace = true }
+pallet-structure = { workspace = true }
+pallet-unique = { workspace = true }
+pallet-unique-scheduler-v2 = { workspace = true }
+precompile-utils-macro = { workspace = true }
+rmrk-rpc = { workspace = true }
+scale-info = { workspace = true }
+up-common = { workspace = true }
+up-data-structs = { workspace = true }
+up-pov-estimate-rpc = { workspace = true }
+up-rpc = { workspace = true }
+up-sponsorship = { workspace = true }
+
+################################################################################
+# Optional dependencies
 
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
-derivative = "2.2.0"
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-log = { version = "0.4.16", default-features = false }
-num_enum = { version = "0.5.3", default-features = false }
-pallet-app-promotion = { path = "../../pallets/app-promotion", default-features = false }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
-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" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm-contract-helpers = { path = "../../pallets/evm-contract-helpers", default-features = false }
-pallet-evm-migration = { path = "../../pallets/evm-migration", default-features = false }
-pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-transaction-payment = { path = "../../pallets/evm-transaction-payment", default-features = false }
-pallet-foreign-assets = { default-features = false, path = "../../pallets/foreign-assets" }
-pallet-fungible = { default-features = false, path = "../../pallets/fungible" }
-pallet-identity = { default-features = false, path = "../../pallets/identity" }
-pallet-inflation = { path = "../../pallets/inflation", default-features = false }
-pallet-maintenance = { default-features = false, path = "../../pallets/maintenance" }
-pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
-pallet-proxy-rmrk-core = { default-features = false, path = "../../pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
-pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
-pallet-refungible = { default-features = false, path = "../../pallets/refungible" }
-pallet-structure = { default-features = false, path = "../../pallets/structure" }
-pallet-unique = { path = "../../pallets/unique", default-features = false }
-pallet-unique-scheduler-v2 = { path = "../../pallets/scheduler-v2", default-features = false }
-precompile-utils-macro.path = "../common/ethereum/precompiles/utils/macro"
-rmrk-rpc = { path = "../../primitives/rmrk-rpc", default-features = false }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-up-common = { path = "../../primitives/common", default-features = false }
-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-v0.9.37" }
+frame-system-benchmarking = { workspace = true, optional = true}
+frame-benchmarking = { workspace = true, optional = true }
+frame-try-runtime = { workspace = true, optional = true }
+serde = { workspace = true, optional = true }
+hex-literal = { workspace = true, optional = true }
 
 ################################################################################
 # Test dependencies
 
-pallet-test-utils = { default-features = false, path = "../../test-pallets/utils" }
+pallet-test-utils = { workspace = true }
 
 ################################################################################
 # Other Dependencies
 
-impl-trait-for-tuples = "0.2.2"
+impl-trait-for-tuples = { workspace = true }
 
 [dev-dependencies]
-logtest = "2.0.0"
+logtest = { workspace = true }
 
 [build-dependencies]
-substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-wasm-builder = { workspace = true }
modifiedruntime/quartz/Cargo.tomldiffbeforeafterboth
--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -196,114 +196,121 @@
 # local dependencies
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-hex-literal = { optional = true, version = "0.3.3" }
-orml-tokens.workspace = true
-orml-traits.workspace = true
-orml-vesting.workspace = true
-orml-xtokens.workspace = true
-pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-randomness-collective-flip = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-rmrk-rpc = { default-features = false, path = "../../primitives/rmrk-rpc" }
-serde = { default-features = false, features = ['derive'], optional = true, version = "1.0.130" }
-smallvec = "1.6.1"
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
-derivative = "2.2.0"
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-log = { version = "0.4.16", default-features = false }
-pallet-app-promotion = { path = "../../pallets/app-promotion", default-features = false }
-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" }
-pallet-fungible = { default-features = false, path = "../../pallets/fungible" }
-pallet-identity = { default-features = false, path = "../../pallets/identity" }
-pallet-inflation = { path = "../../pallets/inflation", default-features = false }
-pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
-pallet-proxy-rmrk-core = { default-features = false, path = "../../pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
-pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
-pallet-refungible = { default-features = false, path = "../../pallets/refungible" }
-pallet-structure = { default-features = false, path = "../../pallets/structure" }
-pallet-unique = { path = "../../pallets/unique", default-features = false }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-up-common = { path = "../../primitives/common", default-features = false }
-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 }
+cumulus-pallet-aura-ext = { workspace = true }
+cumulus-pallet-dmp-queue = { workspace = true }
+cumulus-pallet-parachain-system = { workspace = true }
+cumulus-pallet-xcm = { workspace = true }
+cumulus-pallet-xcmp-queue = { workspace = true }
+cumulus-primitives-core = { workspace = true }
+cumulus-primitives-timestamp = { workspace = true }
+cumulus-primitives-utility = { workspace = true }
+frame-executive = { workspace = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+frame-system-rpc-runtime-api = { workspace = true }
+orml-tokens = { workspace = true }
+orml-traits = { workspace = true }
+orml-vesting = { workspace = true }
+orml-xtokens = { workspace = true }
+pallet-aura = { workspace = true }
+pallet-authorship = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-randomness-collective-flip = { workspace = true }
+pallet-session = { workspace = true }
+pallet-sudo = { workspace = true }
+pallet-timestamp = { workspace = true }
+pallet-transaction-payment = { workspace = true }
+pallet-transaction-payment-rpc-runtime-api = { workspace = true }
+pallet-treasury = { workspace = true }
+pallet-xcm = { workspace = true }
+parachain-info = { workspace = true }
+polkadot-parachain = { workspace = true }
+rmrk-rpc = { workspace = true }
+smallvec = { workspace = true }
+sp-api = { workspace = true }
+sp-arithmetic = { workspace = true }
+sp-block-builder = { workspace = true }
+sp-consensus-aura = { workspace = true }
+sp-core = { workspace = true }
+sp-inherents = { workspace = true }
+sp-io = { workspace = true }
+sp-offchain = { workspace = true }
+sp-runtime = { workspace = true }
+sp-session = { workspace = true }
+sp-std = { workspace = true }
+sp-transaction-pool = { workspace = true }
+sp-version = { workspace = true }
+xcm = { workspace = true }
+xcm-builder = { workspace = true }
+xcm-executor = { workspace = true }
+
+app-promotion-rpc = { workspace = true }
+derivative = { workspace = true }
+fp-evm = { workspace = true }
+fp-evm-mapping = { workspace = true }
+log = { workspace = true }
+pallet-app-promotion = { workspace = true }
+pallet-collator-selection = { workspace = true }
+pallet-common = { workspace = true }
+pallet-configuration = { workspace = true }
+pallet-fungible = { workspace = true }
+pallet-identity = { workspace = true }
+pallet-inflation = { workspace = true }
+pallet-nonfungible = { workspace = true }
+pallet-proxy-rmrk-core = { workspace = true }
+pallet-proxy-rmrk-equip = { workspace = true }
+pallet-refungible = { workspace = true }
+pallet-structure = { workspace = true }
+pallet-unique = { workspace = true }
+scale-info = { workspace = true }
+up-common = { workspace = true }
+up-data-structs = { workspace = true }
+up-pov-estimate-rpc = { workspace = true }
+up-rpc = { workspace = true }
 # pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
+evm-coder = { workspace = true }
+fp-rpc = { workspace = true }
+fp-self-contained = { workspace = true }
 num_enum = { version = "0.5.3", default-features = false }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm-contract-helpers = { path = "../../pallets/evm-contract-helpers", default-features = false }
-pallet-evm-migration = { path = "../../pallets/evm-migration", default-features = false }
-pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-transaction-payment = { path = "../../pallets/evm-transaction-payment", default-features = false }
-pallet-foreign-assets = { default-features = false, path = "../../pallets/foreign-assets" }
-pallet-maintenance = { default-features = false, path = "../../pallets/maintenance" }
-precompile-utils-macro.path = "../common/ethereum/precompiles/utils/macro"
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
+pallet-base-fee = { workspace = true }
+pallet-charge-transaction = { workspace = true }
+pallet-ethereum = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-evm-contract-helpers = { workspace = true }
+pallet-evm-migration = { workspace = true }
+pallet-evm-precompile-simple = { workspace = true }
+pallet-evm-transaction-payment = { workspace = true }
+pallet-foreign-assets = { workspace = true }
+pallet-maintenance = { workspace = true }
+precompile-utils-macro = { workspace = true }
+up-sponsorship = { workspace = true }
+
+################################################################################
+# Optional dependencies
+
+frame-system-benchmarking = { workspace = true, optional = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-try-runtime = { workspace = true, optional = true }
+serde = { workspace = true, optional = true }
+hex-literal = { workspace = true, optional = true }
+
 
 ################################################################################
 # Test dependencies
 
-pallet-test-utils = { default-features = false, path = "../../test-pallets/utils" }
+pallet-test-utils = { workspace = true }
 
 ################################################################################
 # Other Dependencies
 
-impl-trait-for-tuples = "0.2.2"
+impl-trait-for-tuples = { workspace = true }
 
 [dev-dependencies]
-logtest = "2.0.0"
+logtest = { workspace = true }
 
 [build-dependencies]
-substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-wasm-builder = { workspace = true }
modifiedruntime/unique/Cargo.tomldiffbeforeafterboth
--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -194,113 +194,120 @@
 # local dependencies
 
 [dependencies]
-codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.1.2" }
-cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false }
-frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-frame-system-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", optional = true, branch = "polkadot-v0.9.37" }
-hex-literal = { optional = true, version = "0.3.3" }
-orml-tokens.workspace = true
-orml-traits.workspace = true
-orml-vesting.workspace = true
-orml-xtokens.workspace = true
-pallet-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-authorship = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-balances = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-randomness-collective-flip = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" }
-polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-smallvec = "1.6.1"
-sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
-xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
 
-app-promotion-rpc = { path = "../../primitives/app_promotion_rpc", default-features = false }
-derivative = "2.2.0"
-log = { version = "0.4.16", default-features = false }
-pallet-app-promotion = { path = "../../pallets/app-promotion", default-features = false }
-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" }
-pallet-fungible = { default-features = false, path = "../../pallets/fungible" }
-pallet-identity = { default-features = false, path = "../../pallets/identity" }
-pallet-inflation = { path = "../../pallets/inflation", default-features = false }
-pallet-nonfungible = { default-features = false, path = "../../pallets/nonfungible" }
-pallet-proxy-rmrk-core = { default-features = false, path = "../../pallets/proxy-rmrk-core", package = "pallet-rmrk-core" }
-pallet-proxy-rmrk-equip = { default-features = false, path = "../../pallets/proxy-rmrk-equip", package = "pallet-rmrk-equip" }
-pallet-refungible = { default-features = false, path = "../../pallets/refungible" }
-pallet-structure = { default-features = false, path = "../../pallets/structure" }
-pallet-unique = { path = "../../pallets/unique", default-features = false }
-rmrk-rpc = { path = "../../primitives/rmrk-rpc", default-features = false }
-scale-info = { version = "2.0.1", default-features = false, features = ["derive"] }
-up-common = { path = "../../primitives/common", default-features = false }
-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 }
+cumulus-pallet-aura-ext = { workspace = true }
+cumulus-pallet-dmp-queue = { workspace = true }
+cumulus-pallet-parachain-system = { workspace = true }
+cumulus-pallet-xcm = { workspace = true }
+cumulus-pallet-xcmp-queue = { workspace = true }
+cumulus-primitives-core = { workspace = true }
+cumulus-primitives-timestamp = { workspace = true }
+cumulus-primitives-utility = { workspace = true }
+frame-executive = { workspace = true }
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+frame-system-rpc-runtime-api = { workspace = true }
+orml-tokens = { workspace = true }
+orml-traits = { workspace = true }
+orml-vesting = { workspace = true }
+orml-xtokens = { workspace = true }
+pallet-aura = { workspace = true }
+pallet-authorship = { workspace = true }
+pallet-balances = { workspace = true }
+pallet-randomness-collective-flip = { workspace = true }
+pallet-session = { workspace = true }
+pallet-sudo = { workspace = true }
+pallet-timestamp = { workspace = true }
+pallet-transaction-payment = { workspace = true }
+pallet-transaction-payment-rpc-runtime-api = { workspace = true }
+pallet-treasury = { workspace = true }
+pallet-xcm = { workspace = true }
+parachain-info = { workspace = true }
+polkadot-parachain = { workspace = true }
+smallvec = { workspace = true }
+sp-api = { workspace = true }
+sp-arithmetic = { workspace = true }
+sp-block-builder = { workspace = true }
+sp-consensus-aura = { workspace = true }
+sp-core = { workspace = true }
+sp-inherents = { workspace = true }
+sp-io = { workspace = true }
+sp-offchain = { workspace = true }
+sp-runtime = { workspace = true }
+sp-session = { workspace = true }
+sp-std = { workspace = true }
+sp-transaction-pool = { workspace = true }
+sp-version = { workspace = true }
+xcm = { workspace = true }
+xcm-builder = { workspace = true }
+xcm-executor = { workspace = true }
+
+app-promotion-rpc = { workspace = true }
+derivative = { workspace = true }
+log = { workspace = true }
+pallet-app-promotion = { workspace = true }
+pallet-collator-selection = { workspace = true }
+pallet-common = { workspace = true }
+pallet-configuration = { workspace = true }
+pallet-fungible = { workspace = true }
+pallet-identity = { workspace = true }
+pallet-inflation = { workspace = true }
+pallet-nonfungible = { workspace = true }
+pallet-proxy-rmrk-core = { workspace = true }
+pallet-proxy-rmrk-equip = { workspace = true }
+pallet-refungible = { workspace = true }
+pallet-structure = { workspace = true }
+pallet-unique = { workspace = true }
+rmrk-rpc = { workspace = true }
+scale-info = { workspace = true }
+up-common = { workspace = true }
+up-data-structs = { workspace = true }
+up-pov-estimate-rpc = { workspace = true }
+up-rpc = { workspace = true }
 # pallet-contract-helpers = { path = '../pallets/contract-helpers', default-features = false, version = '0.1.0' }
-evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-num_enum = { version = "0.5.3", default-features = false }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm-contract-helpers = { path = "../../pallets/evm-contract-helpers", default-features = false }
-pallet-evm-migration = { path = "../../pallets/evm-migration", default-features = false }
-pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" }
-pallet-evm-transaction-payment = { path = "../../pallets/evm-transaction-payment", default-features = false }
-pallet-foreign-assets = { default-features = false, path = "../../pallets/foreign-assets" }
-pallet-maintenance = { default-features = false, path = "../../pallets/maintenance" }
-precompile-utils-macro.path = "../common/ethereum/precompiles/utils/macro"
-up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" }
+evm-coder = { workspace = true }
+fp-evm = { workspace = true }
+fp-evm-mapping = { workspace = true }
+fp-rpc = { workspace = true }
+fp-self-contained = { workspace = true }
+num_enum = { workspace = true }
+pallet-base-fee = { workspace = true }
+pallet-charge-transaction = { workspace = true }
+pallet-ethereum = { workspace = true }
+pallet-evm = { workspace = true }
+pallet-evm-coder-substrate = { workspace = true }
+pallet-evm-contract-helpers = { workspace = true }
+pallet-evm-migration = { workspace = true }
+pallet-evm-precompile-simple = { workspace = true }
+pallet-evm-transaction-payment = { workspace = true }
+pallet-foreign-assets = { workspace = true }
+pallet-maintenance = { workspace = true }
+precompile-utils-macro = { workspace = true }
+up-sponsorship = { workspace = true }
+
+################################################################################
+# Optional dependencies
+
+frame-system-benchmarking = { workspace = true, optional = true }
+frame-benchmarking = { workspace = true, optional = true }
+frame-try-runtime = { workspace = true, optional = true }
+serde = { workspace = true, optional = true }
+hex-literal = { workspace = true, optional = true }
 
 ################################################################################
 # Test dependencies
 
-pallet-test-utils = { default-features = false, path = "../../test-pallets/utils" }
+pallet-test-utils = { workspace = true }
 
 ################################################################################
 # Other Dependencies
 
-impl-trait-for-tuples = "0.2.2"
+impl-trait-for-tuples = { workspace = true }
 
 [dev-dependencies]
-logtest = "2.0.0"
+logtest = { workspace = true }
 
 [build-dependencies]
-substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+substrate-wasm-builder = { workspace = true }
modifiedtest-pallets/utils/Cargo.tomldiffbeforeafterboth
--- a/test-pallets/utils/Cargo.toml
+++ b/test-pallets/utils/Cargo.toml
@@ -6,13 +6,15 @@
 version = "0.1.0"
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["derive"] }
-frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+# Note: `package = "parity-scale-codec"` must be supplied since the `Encode` macro searches for it.
+codec = { workspace = true, package = "parity-scale-codec" }
+
+frame-support = { workspace = true }
+frame-system = { workspace = true }
+scale-info = { workspace = true }
 # pallet-unique-scheduler = { path = '../../pallets/scheduler', default-features = false }
-pallet-unique-scheduler-v2 = { path = "../../pallets/scheduler-v2", default-features = false }
-sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" }
+pallet-unique-scheduler-v2 = { workspace = true }
+sp-std = { workspace = true }
 
 [features]
 default = ["std"]