From e89d0fca351de0712f104c55fe45ed124b5c6968 Mon Sep 17 00:00:00 2001
From: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
Date: Tue, 20 Feb 2024 15:28:05 +0100
Subject: [PATCH] Lift dependencies to the workspace (Part 2/x) (#3366)

Lifting some more dependencies to the workspace. Just using the
most-often updated ones for now.
It can be reproduced locally.

```sh
# First you can check if there would be semver incompatible bumps (looks good in this case):
$ zepter transpose dependency lift-to-workspace --ignore-errors syn quote thiserror "regex:^serde.*"

# Then apply the changes:
$ zepter transpose dependency lift-to-workspace --version-resolver=highest syn quote thiserror "regex:^serde.*" --fix

# And format the changes:
$ taplo format --config .config/taplo.toml
```

---------

Signed-off-by: Oliver Tale-Yazdi <oliver.tale-yazdi@parity.io>
---
 .config/taplo.toml                                        | 1 +
 Cargo.toml                                                | 8 ++++++++
 bridges/primitives/header-chain/Cargo.toml                | 2 +-
 bridges/primitives/messages/Cargo.toml                    | 2 +-
 bridges/primitives/polkadot-core/Cargo.toml               | 2 +-
 bridges/primitives/runtime/Cargo.toml                     | 2 +-
 bridges/snowbridge/pallets/ethereum-client/Cargo.toml     | 8 ++++----
 bridges/snowbridge/pallets/inbound-queue/Cargo.toml       | 2 +-
 bridges/snowbridge/pallets/outbound-queue/Cargo.toml      | 2 +-
 bridges/snowbridge/primitives/beacon/Cargo.toml           | 2 +-
 bridges/snowbridge/primitives/core/Cargo.toml             | 2 +-
 bridges/snowbridge/primitives/ethereum/Cargo.toml         | 6 +++---
 bridges/snowbridge/primitives/router/Cargo.toml           | 2 +-
 bridges/snowbridge/runtime/test-common/Cargo.toml         | 2 +-
 cumulus/client/consensus/proposer/Cargo.toml              | 2 +-
 cumulus/client/relay-chain-interface/Cargo.toml           | 2 +-
 cumulus/client/relay-chain-rpc-interface/Cargo.toml       | 6 +++---
 cumulus/pallets/parachain-system/proc-macro/Cargo.toml    | 4 ++--
 cumulus/parachain-template/node/Cargo.toml                | 4 ++--
 cumulus/parachain-template/pallets/template/Cargo.toml    | 2 +-
 .../runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml     | 2 +-
 .../runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml    | 2 +-
 .../runtimes/coretime/coretime-rococo/Cargo.toml          | 2 +-
 .../runtimes/coretime/coretime-westend/Cargo.toml         | 2 +-
 .../parachains/runtimes/people/people-rococo/Cargo.toml   | 2 +-
 .../parachains/runtimes/people/people-westend/Cargo.toml  | 2 +-
 cumulus/polkadot-parachain/Cargo.toml                     | 4 ++--
 cumulus/test/service/Cargo.toml                           | 4 ++--
 polkadot/cli/Cargo.toml                                   | 2 +-
 polkadot/erasure-coding/Cargo.toml                        | 2 +-
 polkadot/node/collation-generation/Cargo.toml             | 2 +-
 polkadot/node/core/approval-voting/Cargo.toml             | 2 +-
 polkadot/node/core/av-store/Cargo.toml                    | 2 +-
 polkadot/node/core/backing/Cargo.toml                     | 2 +-
 polkadot/node/core/bitfield-signing/Cargo.toml            | 2 +-
 polkadot/node/core/chain-selection/Cargo.toml             | 2 +-
 polkadot/node/core/dispute-coordinator/Cargo.toml         | 2 +-
 polkadot/node/core/parachains-inherent/Cargo.toml         | 2 +-
 polkadot/node/core/prospective-parachains/Cargo.toml      | 2 +-
 polkadot/node/core/provisioner/Cargo.toml                 | 2 +-
 polkadot/node/core/pvf-checker/Cargo.toml                 | 2 +-
 polkadot/node/core/pvf/Cargo.toml                         | 2 +-
 polkadot/node/core/pvf/common/Cargo.toml                  | 2 +-
 polkadot/node/gum/proc-macro/Cargo.toml                   | 4 ++--
 polkadot/node/jaeger/Cargo.toml                           | 2 +-
 .../node/network/availability-distribution/Cargo.toml     | 2 +-
 polkadot/node/network/availability-recovery/Cargo.toml    | 2 +-
 polkadot/node/network/bridge/Cargo.toml                   | 2 +-
 polkadot/node/network/collator-protocol/Cargo.toml        | 2 +-
 polkadot/node/network/dispute-distribution/Cargo.toml     | 2 +-
 polkadot/node/network/protocol/Cargo.toml                 | 2 +-
 polkadot/node/network/statement-distribution/Cargo.toml   | 2 +-
 polkadot/node/primitives/Cargo.toml                       | 4 ++--
 polkadot/node/service/Cargo.toml                          | 6 +++---
 polkadot/node/subsystem-bench/Cargo.toml                  | 4 ++--
 polkadot/node/subsystem-types/Cargo.toml                  | 2 +-
 polkadot/node/subsystem-util/Cargo.toml                   | 2 +-
 polkadot/node/test/service/Cargo.toml                     | 2 +-
 polkadot/node/zombienet-backchannel/Cargo.toml            | 6 +++---
 polkadot/parachain/Cargo.toml                             | 2 +-
 polkadot/primitives/Cargo.toml                            | 2 +-
 polkadot/runtime/common/Cargo.toml                        | 6 +++---
 polkadot/runtime/parachains/Cargo.toml                    | 4 ++--
 polkadot/runtime/rococo/Cargo.toml                        | 6 +++---
 polkadot/runtime/test-runtime/Cargo.toml                  | 6 +++---
 polkadot/runtime/westend/Cargo.toml                       | 6 +++---
 polkadot/xcm/Cargo.toml                                   | 2 +-
 polkadot/xcm/pallet-xcm/Cargo.toml                        | 2 +-
 polkadot/xcm/procedural/Cargo.toml                        | 4 ++--
 substrate/bin/minimal/node/Cargo.toml                     | 2 +-
 substrate/bin/node-template/node/Cargo.toml               | 2 +-
 substrate/bin/node-template/runtime/Cargo.toml            | 2 +-
 substrate/bin/node/bench/Cargo.toml                       | 4 ++--
 substrate/bin/node/cli/Cargo.toml                         | 6 +++---
 substrate/bin/node/inspect/Cargo.toml                     | 2 +-
 substrate/bin/node/runtime/Cargo.toml                     | 2 +-
 substrate/bin/utils/chain-spec-builder/Cargo.toml         | 2 +-
 substrate/client/allocator/Cargo.toml                     | 2 +-
 substrate/client/api/Cargo.toml                           | 2 +-
 substrate/client/authority-discovery/Cargo.toml           | 2 +-
 substrate/client/chain-spec/Cargo.toml                    | 4 ++--
 substrate/client/chain-spec/derive/Cargo.toml             | 4 ++--
 substrate/client/cli/Cargo.toml                           | 6 +++---
 substrate/client/consensus/aura/Cargo.toml                | 2 +-
 substrate/client/consensus/babe/Cargo.toml                | 2 +-
 substrate/client/consensus/babe/rpc/Cargo.toml            | 6 +++---
 substrate/client/consensus/beefy/Cargo.toml               | 4 ++--
 substrate/client/consensus/beefy/rpc/Cargo.toml           | 6 +++---
 substrate/client/consensus/common/Cargo.toml              | 4 ++--
 substrate/client/consensus/grandpa/Cargo.toml             | 6 +++---
 substrate/client/consensus/grandpa/rpc/Cargo.toml         | 4 ++--
 substrate/client/consensus/manual-seal/Cargo.toml         | 4 ++--
 substrate/client/consensus/pow/Cargo.toml                 | 2 +-
 substrate/client/executor/common/Cargo.toml               | 2 +-
 substrate/client/keystore/Cargo.toml                      | 4 ++--
 substrate/client/merkle-mountain-range/rpc/Cargo.toml     | 4 ++--
 substrate/client/mixnet/Cargo.toml                        | 2 +-
 substrate/client/network/Cargo.toml                       | 6 +++---
 substrate/client/network/bitswap/Cargo.toml               | 2 +-
 substrate/client/network/light/Cargo.toml                 | 2 +-
 substrate/client/network/sync/Cargo.toml                  | 2 +-
 substrate/client/rpc-api/Cargo.toml                       | 6 +++---
 substrate/client/rpc-servers/Cargo.toml                   | 2 +-
 substrate/client/rpc-spec-v2/Cargo.toml                   | 6 +++---
 substrate/client/rpc/Cargo.toml                           | 2 +-
 substrate/client/service/Cargo.toml                       | 6 +++---
 substrate/client/storage-monitor/Cargo.toml               | 2 +-
 substrate/client/sync-state-rpc/Cargo.toml                | 6 +++---
 substrate/client/sysinfo/Cargo.toml                       | 4 ++--
 substrate/client/telemetry/Cargo.toml                     | 6 +++---
 substrate/client/tracing/Cargo.toml                       | 4 ++--
 substrate/client/tracing/proc-macro/Cargo.toml            | 4 ++--
 substrate/client/transaction-pool/Cargo.toml              | 4 ++--
 substrate/client/transaction-pool/api/Cargo.toml          | 6 +++---
 substrate/frame/beefy-mmr/Cargo.toml                      | 2 +-
 substrate/frame/beefy/Cargo.toml                          | 2 +-
 substrate/frame/benchmarking/Cargo.toml                   | 2 +-
 substrate/frame/contracts/Cargo.toml                      | 2 +-
 substrate/frame/contracts/proc-macro/Cargo.toml           | 4 ++--
 substrate/frame/conviction-voting/Cargo.toml              | 2 +-
 substrate/frame/democracy/Cargo.toml                      | 2 +-
 .../election-provider-support/solution-type/Cargo.toml    | 4 ++--
 substrate/frame/message-queue/Cargo.toml                  | 2 +-
 substrate/frame/mixnet/Cargo.toml                         | 2 +-
 substrate/frame/offences/Cargo.toml                       | 2 +-
 substrate/frame/parameters/Cargo.toml                     | 2 +-
 substrate/frame/referenda/Cargo.toml                      | 2 +-
 substrate/frame/remark/Cargo.toml                         | 2 +-
 substrate/frame/staking/Cargo.toml                        | 2 +-
 substrate/frame/staking/reward-curve/Cargo.toml           | 4 ++--
 substrate/frame/state-trie-migration/Cargo.toml           | 2 +-
 substrate/frame/support/Cargo.toml                        | 4 ++--
 substrate/frame/support/procedural/Cargo.toml             | 4 ++--
 substrate/frame/support/procedural/tools/Cargo.toml       | 4 ++--
 .../frame/support/procedural/tools/derive/Cargo.toml      | 4 ++--
 substrate/frame/support/test/Cargo.toml                   | 2 +-
 substrate/frame/support/test/pallet/Cargo.toml            | 2 +-
 substrate/frame/system/Cargo.toml                         | 2 +-
 substrate/frame/tips/Cargo.toml                           | 2 +-
 substrate/frame/transaction-payment/Cargo.toml            | 4 ++--
 .../frame/transaction-payment/asset-tx-payment/Cargo.toml | 4 ++--
 substrate/frame/transaction-storage/Cargo.toml            | 2 +-
 substrate/frame/treasury/Cargo.toml                       | 2 +-
 substrate/primitives/api/Cargo.toml                       | 2 +-
 substrate/primitives/api/proc-macro/Cargo.toml            | 4 ++--
 substrate/primitives/application-crypto/Cargo.toml        | 2 +-
 substrate/primitives/arithmetic/Cargo.toml                | 2 +-
 substrate/primitives/blockchain/Cargo.toml                | 2 +-
 substrate/primitives/consensus/babe/Cargo.toml            | 2 +-
 substrate/primitives/consensus/beefy/Cargo.toml           | 2 +-
 substrate/primitives/consensus/common/Cargo.toml          | 2 +-
 substrate/primitives/consensus/grandpa/Cargo.toml         | 2 +-
 substrate/primitives/consensus/sassafras/Cargo.toml       | 2 +-
 substrate/primitives/consensus/slots/Cargo.toml           | 2 +-
 substrate/primitives/core/Cargo.toml                      | 6 +++---
 substrate/primitives/crypto/hashing/proc-macro/Cargo.toml | 4 ++--
 substrate/primitives/debug-derive/Cargo.toml              | 4 ++--
 substrate/primitives/genesis-builder/Cargo.toml           | 2 +-
 substrate/primitives/inherents/Cargo.toml                 | 2 +-
 substrate/primitives/maybe-compressed-blob/Cargo.toml     | 2 +-
 substrate/primitives/merkle-mountain-range/Cargo.toml     | 4 ++--
 substrate/primitives/npos-elections/Cargo.toml            | 2 +-
 substrate/primitives/rpc/Cargo.toml                       | 4 ++--
 .../primitives/runtime-interface/proc-macro/Cargo.toml    | 4 ++--
 substrate/primitives/runtime/Cargo.toml                   | 4 ++--
 substrate/primitives/staking/Cargo.toml                   | 2 +-
 substrate/primitives/state-machine/Cargo.toml             | 2 +-
 substrate/primitives/statement-store/Cargo.toml           | 2 +-
 substrate/primitives/storage/Cargo.toml                   | 2 +-
 substrate/primitives/test-primitives/Cargo.toml           | 2 +-
 substrate/primitives/timestamp/Cargo.toml                 | 2 +-
 substrate/primitives/trie/Cargo.toml                      | 2 +-
 substrate/primitives/version/Cargo.toml                   | 4 ++--
 substrate/primitives/version/proc-macro/Cargo.toml        | 4 ++--
 substrate/primitives/weights/Cargo.toml                   | 2 +-
 substrate/test-utils/client/Cargo.toml                    | 4 ++--
 substrate/test-utils/runtime/Cargo.toml                   | 4 ++--
 substrate/test-utils/runtime/transaction-pool/Cargo.toml  | 2 +-
 substrate/utils/frame/benchmarking-cli/Cargo.toml         | 6 +++---
 substrate/utils/frame/remote-externalities/Cargo.toml     | 2 +-
 substrate/utils/frame/rpc/client/Cargo.toml               | 2 +-
 .../utils/frame/rpc/state-trie-migration-rpc/Cargo.toml   | 4 ++--
 substrate/utils/frame/rpc/support/Cargo.toml              | 2 +-
 substrate/utils/frame/try-runtime/cli/Cargo.toml          | 4 ++--
 substrate/utils/prometheus/Cargo.toml                     | 2 +-
 185 files changed, 283 insertions(+), 274 deletions(-)

diff --git a/.config/taplo.toml b/.config/taplo.toml
index a45204923cf..2c6ccfb2b34 100644
--- a/.config/taplo.toml
+++ b/.config/taplo.toml
@@ -7,6 +7,7 @@ exclude = [
 	"polkadot/node/malus/integrationtests/**",
 	"polkadot/zombienet_tests/**",
 	"substrate/zombienet/**",
+	"target/**",
 ]
 
 # global rules
diff --git a/Cargo.toml b/Cargo.toml
index d09f19f280c..7e666755922 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -537,6 +537,14 @@ default_constructed_unit_structs = { level = "allow", priority = 2 } # stylistic
 polkavm-linker = "0.8.2"
 polkavm-derive = "0.8.0"
 log = { version = "0.4.20", default-features = false }
+quote = { version = "1.0.33" }
+serde = { version = "1.0.196", default-features = false }
+serde-big-array = { version = "0.3.2" }
+serde_derive = { version = "1.0.117" }
+serde_json = { version = "1.0.113", default-features = false }
+serde_yaml = { version = "0.9" }
+syn = { version = "2.0.49" }
+thiserror = { version = "1.0.48" }
 
 [profile.release]
 # Polkadot runtime requires unwinding.
diff --git a/bridges/primitives/header-chain/Cargo.toml b/bridges/primitives/header-chain/Cargo.toml
index 828b567bb94..205b593365e 100644
--- a/bridges/primitives/header-chain/Cargo.toml
+++ b/bridges/primitives/header-chain/Cargo.toml
@@ -13,7 +13,7 @@ workspace = true
 codec = { package = "parity-scale-codec", version = "3.1.5", default-features = false }
 finality-grandpa = { version = "0.16.2", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 
 # Bridge dependencies
 
diff --git a/bridges/primitives/messages/Cargo.toml b/bridges/primitives/messages/Cargo.toml
index 54aae4a2f76..8aa6b4b05e5 100644
--- a/bridges/primitives/messages/Cargo.toml
+++ b/bridges/primitives/messages/Cargo.toml
@@ -12,7 +12,7 @@ workspace = true
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.1.5", default-features = false, features = ["bit-vec", "derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["bit-vec", "derive"] }
-serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 
 # Bridge dependencies
 
diff --git a/bridges/primitives/polkadot-core/Cargo.toml b/bridges/primitives/polkadot-core/Cargo.toml
index e667c283a07..c0dae684b5f 100644
--- a/bridges/primitives/polkadot-core/Cargo.toml
+++ b/bridges/primitives/polkadot-core/Cargo.toml
@@ -13,7 +13,7 @@ workspace = true
 codec = { package = "parity-scale-codec", version = "3.1.5", default-features = false, features = ["derive"] }
 parity-util-mem = { version = "0.12.0", optional = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 
 # Bridge Dependencies
 
diff --git a/bridges/primitives/runtime/Cargo.toml b/bridges/primitives/runtime/Cargo.toml
index 2ea31c26d6b..22206fb2c37 100644
--- a/bridges/primitives/runtime/Cargo.toml
+++ b/bridges/primitives/runtime/Cargo.toml
@@ -16,7 +16,7 @@ impl-trait-for-tuples = "0.2.2"
 log = { workspace = true }
 num-traits = { version = "0.2", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 
 # Substrate Dependencies
 
diff --git a/bridges/snowbridge/pallets/ethereum-client/Cargo.toml b/bridges/snowbridge/pallets/ethereum-client/Cargo.toml
index 541ded26737..99b42905311 100644
--- a/bridges/snowbridge/pallets/ethereum-client/Cargo.toml
+++ b/bridges/snowbridge/pallets/ethereum-client/Cargo.toml
@@ -15,8 +15,8 @@ workspace = true
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.196", optional = true }
-serde_json = { version = "1.0.113", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
+serde_json = { optional = true, workspace = true, default-features = true }
 codec = { version = "3.6.1", package = "parity-scale-codec", default-features = false, features = ["derive"] }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 ssz_rs = { version = "0.9.0", default-features = false }
@@ -45,12 +45,12 @@ pallet-timestamp = { path = "../../../../substrate/frame/timestamp", default-fea
 [dev-dependencies]
 rand = "0.8.5"
 sp-keyring = { path = "../../../../substrate/primitives/keyring" }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 hex-literal = "0.4.1"
 pallet-timestamp = { path = "../../../../substrate/frame/timestamp" }
 snowbridge-pallet-ethereum-client-fixtures = { path = "./fixtures" }
 sp-io = { path = "../../../../substrate/primitives/io" }
-serde = "1.0.196"
+serde = { workspace = true, default-features = true }
 
 [features]
 default = ["std"]
diff --git a/bridges/snowbridge/pallets/inbound-queue/Cargo.toml b/bridges/snowbridge/pallets/inbound-queue/Cargo.toml
index 09653fa3b48..c26ef90a22d 100644
--- a/bridges/snowbridge/pallets/inbound-queue/Cargo.toml
+++ b/bridges/snowbridge/pallets/inbound-queue/Cargo.toml
@@ -15,7 +15,7 @@ workspace = true
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 codec = { version = "3.6.1", package = "parity-scale-codec", default-features = false, features = ["derive"] }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 hex-literal = { version = "0.4.1", optional = true }
diff --git a/bridges/snowbridge/pallets/outbound-queue/Cargo.toml b/bridges/snowbridge/pallets/outbound-queue/Cargo.toml
index 0956ac76678..40e57db4bbd 100644
--- a/bridges/snowbridge/pallets/outbound-queue/Cargo.toml
+++ b/bridges/snowbridge/pallets/outbound-queue/Cargo.toml
@@ -15,7 +15,7 @@ workspace = true
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.196", features = ["alloc", "derive"], default-features = false }
+serde = { features = ["alloc", "derive"], workspace = true }
 codec = { version = "3.6.1", package = "parity-scale-codec", default-features = false, features = ["derive"] }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 hex-literal = { version = "0.4.1", optional = true }
diff --git a/bridges/snowbridge/primitives/beacon/Cargo.toml b/bridges/snowbridge/primitives/beacon/Cargo.toml
index 4f5213b3422..e021bb01071 100644
--- a/bridges/snowbridge/primitives/beacon/Cargo.toml
+++ b/bridges/snowbridge/primitives/beacon/Cargo.toml
@@ -12,7 +12,7 @@ categories = ["cryptography::cryptocurrencies"]
 workspace = true
 
 [dependencies]
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 hex = { version = "0.4", default-features = false }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
diff --git a/bridges/snowbridge/primitives/core/Cargo.toml b/bridges/snowbridge/primitives/core/Cargo.toml
index 460c6c3442e..090c48c403f 100644
--- a/bridges/snowbridge/primitives/core/Cargo.toml
+++ b/bridges/snowbridge/primitives/core/Cargo.toml
@@ -12,7 +12,7 @@ categories = ["cryptography::cryptocurrencies"]
 workspace = true
 
 [dependencies]
-serde = { version = "1.0.196", optional = true, features = ["alloc", "derive"], default-features = false }
+serde = { optional = true, features = ["alloc", "derive"], workspace = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 hex-literal = { version = "0.4.1" }
diff --git a/bridges/snowbridge/primitives/ethereum/Cargo.toml b/bridges/snowbridge/primitives/ethereum/Cargo.toml
index a9e2fe65421..399139cef38 100644
--- a/bridges/snowbridge/primitives/ethereum/Cargo.toml
+++ b/bridges/snowbridge/primitives/ethereum/Cargo.toml
@@ -12,8 +12,8 @@ categories = ["cryptography::cryptocurrencies"]
 workspace = true
 
 [dependencies]
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
-serde-big-array = { version = "0.3.2", optional = true, features = ["const-generics"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
+serde-big-array = { optional = true, features = ["const-generics"], workspace = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 ethbloom = { version = "0.13.0", default-features = false }
@@ -33,7 +33,7 @@ ethabi = { package = "ethabi-decode", version = "1.0.0", default-features = fals
 [dev-dependencies]
 wasm-bindgen-test = "0.3.19"
 rand = "0.8.5"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 [features]
 default = ["std"]
diff --git a/bridges/snowbridge/primitives/router/Cargo.toml b/bridges/snowbridge/primitives/router/Cargo.toml
index c4fc688a946..750a2a73e63 100644
--- a/bridges/snowbridge/primitives/router/Cargo.toml
+++ b/bridges/snowbridge/primitives/router/Cargo.toml
@@ -12,7 +12,7 @@ categories = ["cryptography::cryptocurrencies"]
 workspace = true
 
 [dependencies]
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 log = { workspace = true }
diff --git a/bridges/snowbridge/runtime/test-common/Cargo.toml b/bridges/snowbridge/runtime/test-common/Cargo.toml
index 868f72b7b86..ec4466b3426 100644
--- a/bridges/snowbridge/runtime/test-common/Cargo.toml
+++ b/bridges/snowbridge/runtime/test-common/Cargo.toml
@@ -15,7 +15,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features =
 hex-literal = { version = "0.4.1" }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 smallvec = "1.11.0"
 
 # Substrate
diff --git a/cumulus/client/consensus/proposer/Cargo.toml b/cumulus/client/consensus/proposer/Cargo.toml
index 8a559c603f3..b37232bb448 100644
--- a/cumulus/client/consensus/proposer/Cargo.toml
+++ b/cumulus/client/consensus/proposer/Cargo.toml
@@ -12,7 +12,7 @@ workspace = true
 [dependencies]
 anyhow = "1.0"
 async-trait = "0.1.74"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 
 # Substrate
 sp-consensus = { path = "../../../../substrate/primitives/consensus/common" }
diff --git a/cumulus/client/relay-chain-interface/Cargo.toml b/cumulus/client/relay-chain-interface/Cargo.toml
index 5cdfff23ae1..6e652b89210 100644
--- a/cumulus/client/relay-chain-interface/Cargo.toml
+++ b/cumulus/client/relay-chain-interface/Cargo.toml
@@ -21,6 +21,6 @@ sc-client-api = { path = "../../../substrate/client/api" }
 
 futures = "0.3.28"
 async-trait = "0.1.74"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 jsonrpsee-core = "0.22"
 parity-scale-codec = "3.6.4"
diff --git a/cumulus/client/relay-chain-rpc-interface/Cargo.toml b/cumulus/client/relay-chain-rpc-interface/Cargo.toml
index 1534537e0d4..801712b1ad1 100644
--- a/cumulus/client/relay-chain-rpc-interface/Cargo.toml
+++ b/cumulus/client/relay-chain-rpc-interface/Cargo.toml
@@ -37,12 +37,12 @@ jsonrpsee = { version = "0.22", features = ["ws-client"] }
 tracing = "0.1.37"
 async-trait = "0.1.74"
 url = "2.4.0"
-serde_json = "1.0.113"
-serde = "1.0.196"
+serde_json = { workspace = true, default-features = true }
+serde = { workspace = true, default-features = true }
 schnellru = "0.2.1"
 smoldot = { version = "0.11.0", default_features = false, features = ["std"] }
 smoldot-light = { version = "0.9.0", default_features = false, features = ["std"] }
 either = "1.8.1"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 rand = "0.8.5"
 pin-project = "1.1.3"
diff --git a/cumulus/pallets/parachain-system/proc-macro/Cargo.toml b/cumulus/pallets/parachain-system/proc-macro/Cargo.toml
index 51737452739..0a90c30e033 100644
--- a/cumulus/pallets/parachain-system/proc-macro/Cargo.toml
+++ b/cumulus/pallets/parachain-system/proc-macro/Cargo.toml
@@ -13,9 +13,9 @@ workspace = true
 proc-macro = true
 
 [dependencies]
-syn = "2.0.49"
+syn = { workspace = true }
 proc-macro2 = "1.0.64"
-quote = "1.0.33"
+quote = { workspace = true }
 proc-macro-crate = "3.0.0"
 
 [features]
diff --git a/cumulus/parachain-template/node/Cargo.toml b/cumulus/parachain-template/node/Cargo.toml
index 77b484913b8..0ef678c4cba 100644
--- a/cumulus/parachain-template/node/Cargo.toml
+++ b/cumulus/parachain-template/node/Cargo.toml
@@ -17,10 +17,10 @@ workspace = true
 clap = { version = "4.5.1", features = ["derive"] }
 log = { workspace = true, default-features = true }
 codec = { package = "parity-scale-codec", version = "3.0.0" }
-serde = { version = "1.0.196", features = ["derive"] }
+serde = { features = ["derive"], workspace = true, default-features = true }
 jsonrpsee = { version = "0.22", features = ["server"] }
 futures = "0.3.28"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 # Local
 parachain-template-runtime = { path = "../runtime" }
diff --git a/cumulus/parachain-template/pallets/template/Cargo.toml b/cumulus/parachain-template/pallets/template/Cargo.toml
index bd9d21d2dd2..04858a161fa 100644
--- a/cumulus/parachain-template/pallets/template/Cargo.toml
+++ b/cumulus/parachain-template/pallets/template/Cargo.toml
@@ -24,7 +24,7 @@ frame-support = { path = "../../../../substrate/frame/support", default-features
 frame-system = { path = "../../../../substrate/frame/system", default-features = false }
 
 [dev-dependencies]
-serde = { version = "1.0.196" }
+serde = { workspace = true, default-features = true }
 
 # Substrate
 sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
index 02e51782700..7a1951fd24b 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
@@ -21,7 +21,7 @@ log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = [
 	"derive",
 ] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 
 # Substrate
 frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true }
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml
index 6015251a238..8623f7cb366 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-westend/Cargo.toml
@@ -17,7 +17,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features =
 hex-literal = { version = "0.4.1" }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 
 # Substrate
 frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true }
diff --git a/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml b/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml
index 4c141fc691c..0bc3b510ed5 100644
--- a/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml
+++ b/cumulus/parachains/runtimes/coretime/coretime-rococo/Cargo.toml
@@ -17,7 +17,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features =
 hex-literal = "0.4.1"
 log = { workspace = true }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 
 # Substrate
 frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true }
diff --git a/cumulus/parachains/runtimes/coretime/coretime-westend/Cargo.toml b/cumulus/parachains/runtimes/coretime/coretime-westend/Cargo.toml
index 135ce95f30f..a7d52dfd784 100644
--- a/cumulus/parachains/runtimes/coretime/coretime-westend/Cargo.toml
+++ b/cumulus/parachains/runtimes/coretime/coretime-westend/Cargo.toml
@@ -17,7 +17,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features =
 hex-literal = "0.4.1"
 log = { workspace = true }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 
 # Substrate
 frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true }
diff --git a/cumulus/parachains/runtimes/people/people-rococo/Cargo.toml b/cumulus/parachains/runtimes/people/people-rococo/Cargo.toml
index 8ff031b3e33..c0b8fb7636b 100644
--- a/cumulus/parachains/runtimes/people/people-rococo/Cargo.toml
+++ b/cumulus/parachains/runtimes/people/people-rococo/Cargo.toml
@@ -15,7 +15,7 @@ enumflags2 = { version = "0.7.7" }
 hex-literal = { version = "0.4.1" }
 log = { workspace = true }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 
 # Substrate
 frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true }
diff --git a/cumulus/parachains/runtimes/people/people-westend/Cargo.toml b/cumulus/parachains/runtimes/people/people-westend/Cargo.toml
index a08b9702160..e87e825a34e 100644
--- a/cumulus/parachains/runtimes/people/people-westend/Cargo.toml
+++ b/cumulus/parachains/runtimes/people/people-westend/Cargo.toml
@@ -15,7 +15,7 @@ enumflags2 = { version = "0.7.7" }
 hex-literal = { version = "0.4.1" }
 log = { workspace = true }
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 
 # Substrate
 frame-benchmarking = { path = "../../../../../substrate/frame/benchmarking", default-features = false, optional = true }
diff --git a/cumulus/polkadot-parachain/Cargo.toml b/cumulus/polkadot-parachain/Cargo.toml
index d5624941c03..84a232e954f 100644
--- a/cumulus/polkadot-parachain/Cargo.toml
+++ b/cumulus/polkadot-parachain/Cargo.toml
@@ -21,8 +21,8 @@ codec = { package = "parity-scale-codec", version = "3.0.0" }
 futures = "0.3.28"
 hex-literal = "0.4.1"
 log = { workspace = true, default-features = true }
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 
 # Local
 rococo-parachain-runtime = { path = "../parachains/runtimes/testing/rococo-parachain" }
diff --git a/cumulus/test/service/Cargo.toml b/cumulus/test/service/Cargo.toml
index 66bc9c66697..b26f0b9967c 100644
--- a/cumulus/test/service/Cargo.toml
+++ b/cumulus/test/service/Cargo.toml
@@ -19,8 +19,8 @@ codec = { package = "parity-scale-codec", version = "3.0.0" }
 criterion = { version = "0.5.1", features = ["async_tokio"] }
 jsonrpsee = { version = "0.22", features = ["server"] }
 rand = "0.8.5"
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 tokio = { version = "1.32.0", features = ["macros"] }
 tracing = "0.1.37"
 url = "2.4.0"
diff --git a/polkadot/cli/Cargo.toml b/polkadot/cli/Cargo.toml
index ee2673ac20f..b9232f95981 100644
--- a/polkadot/cli/Cargo.toml
+++ b/polkadot/cli/Cargo.toml
@@ -21,7 +21,7 @@ crate-type = ["cdylib", "rlib"]
 cfg-if = "1.0"
 clap = { version = "4.5.1", features = ["derive"], optional = true }
 log = { workspace = true, default-features = true }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 futures = "0.3.21"
 pyro = { package = "pyroscope", version = "0.5.3", optional = true }
 pyroscope_pprofrs = { version = "0.2", optional = true }
diff --git a/polkadot/erasure-coding/Cargo.toml b/polkadot/erasure-coding/Cargo.toml
index 8705c14c3a4..677f15c4b9a 100644
--- a/polkadot/erasure-coding/Cargo.toml
+++ b/polkadot/erasure-coding/Cargo.toml
@@ -16,7 +16,7 @@ novelpoly = { package = "reed-solomon-novelpoly", version = "2.0.0" }
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive", "std"] }
 sp-core = { path = "../../substrate/primitives/core" }
 sp-trie = { path = "../../substrate/primitives/trie" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 
 [dev-dependencies]
 criterion = { version = "0.4.0", default-features = false, features = ["cargo_bench_support"] }
diff --git a/polkadot/node/collation-generation/Cargo.toml b/polkadot/node/collation-generation/Cargo.toml
index 8c6644ad6da..8df0c2b1eda 100644
--- a/polkadot/node/collation-generation/Cargo.toml
+++ b/polkadot/node/collation-generation/Cargo.toml
@@ -19,7 +19,7 @@ polkadot-node-subsystem-util = { path = "../subsystem-util" }
 polkadot-primitives = { path = "../../primitives" }
 sp-core = { path = "../../../substrate/primitives/core" }
 sp-maybe-compressed-blob = { path = "../../../substrate/primitives/maybe-compressed-blob" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["bit-vec", "derive"] }
 
 [dev-dependencies]
diff --git a/polkadot/node/core/approval-voting/Cargo.toml b/polkadot/node/core/approval-voting/Cargo.toml
index 1010779a1b3..f6d89dbc152 100644
--- a/polkadot/node/core/approval-voting/Cargo.toml
+++ b/polkadot/node/core/approval-voting/Cargo.toml
@@ -20,7 +20,7 @@ merlin = "3.0"
 schnorrkel = "0.11.4"
 kvdb = "0.13.0"
 derive_more = "0.99.17"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 itertools = "0.10.5"
 
 polkadot-node-subsystem = { path = "../../subsystem" }
diff --git a/polkadot/node/core/av-store/Cargo.toml b/polkadot/node/core/av-store/Cargo.toml
index 4f5c18a68d6..05212da7479 100644
--- a/polkadot/node/core/av-store/Cargo.toml
+++ b/polkadot/node/core/av-store/Cargo.toml
@@ -13,7 +13,7 @@ workspace = true
 futures = "0.3.21"
 futures-timer = "3.0.2"
 kvdb = "0.13.0"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 gum = { package = "tracing-gum", path = "../../gum" }
 bitvec = "1.0.0"
 
diff --git a/polkadot/node/core/backing/Cargo.toml b/polkadot/node/core/backing/Cargo.toml
index 1c69fc441b3..b0cf041e38d 100644
--- a/polkadot/node/core/backing/Cargo.toml
+++ b/polkadot/node/core/backing/Cargo.toml
@@ -20,7 +20,7 @@ erasure-coding = { package = "polkadot-erasure-coding", path = "../../../erasure
 statement-table = { package = "polkadot-statement-table", path = "../../../statement-table" }
 bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] }
 gum = { package = "tracing-gum", path = "../../gum" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 fatality = "0.0.6"
 
 [dev-dependencies]
diff --git a/polkadot/node/core/bitfield-signing/Cargo.toml b/polkadot/node/core/bitfield-signing/Cargo.toml
index f42e8f8d22b..6ecfffd7249 100644
--- a/polkadot/node/core/bitfield-signing/Cargo.toml
+++ b/polkadot/node/core/bitfield-signing/Cargo.toml
@@ -17,7 +17,7 @@ polkadot-node-subsystem = { path = "../../subsystem" }
 polkadot-node-subsystem-util = { path = "../../subsystem-util" }
 sp-keystore = { path = "../../../../substrate/primitives/keystore" }
 wasm-timer = "0.2.5"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 
 [dev-dependencies]
 polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" }
diff --git a/polkadot/node/core/chain-selection/Cargo.toml b/polkadot/node/core/chain-selection/Cargo.toml
index 27c2df85235..96fd42785cd 100644
--- a/polkadot/node/core/chain-selection/Cargo.toml
+++ b/polkadot/node/core/chain-selection/Cargo.toml
@@ -18,7 +18,7 @@ polkadot-node-primitives = { path = "../../primitives" }
 polkadot-node-subsystem = { path = "../../subsystem" }
 polkadot-node-subsystem-util = { path = "../../subsystem-util" }
 kvdb = "0.13.0"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 parity-scale-codec = "3.6.1"
 
 [dev-dependencies]
diff --git a/polkadot/node/core/dispute-coordinator/Cargo.toml b/polkadot/node/core/dispute-coordinator/Cargo.toml
index 8a414a35f39..1fff0a77170 100644
--- a/polkadot/node/core/dispute-coordinator/Cargo.toml
+++ b/polkadot/node/core/dispute-coordinator/Cargo.toml
@@ -14,7 +14,7 @@ futures = "0.3.21"
 gum = { package = "tracing-gum", path = "../../gum" }
 parity-scale-codec = "3.6.1"
 kvdb = "0.13.0"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 schnellru = "0.2.1"
 fatality = "0.0.6"
 
diff --git a/polkadot/node/core/parachains-inherent/Cargo.toml b/polkadot/node/core/parachains-inherent/Cargo.toml
index 3b2fa634102..24da4dc1e31 100644
--- a/polkadot/node/core/parachains-inherent/Cargo.toml
+++ b/polkadot/node/core/parachains-inherent/Cargo.toml
@@ -13,7 +13,7 @@ workspace = true
 futures = "0.3.21"
 futures-timer = "3.0.2"
 gum = { package = "tracing-gum", path = "../../gum" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 async-trait = "0.1.74"
 polkadot-node-subsystem = { path = "../../subsystem" }
 polkadot-overseer = { path = "../../overseer" }
diff --git a/polkadot/node/core/prospective-parachains/Cargo.toml b/polkadot/node/core/prospective-parachains/Cargo.toml
index 5f0b2c0fdc9..5b62d90c1d4 100644
--- a/polkadot/node/core/prospective-parachains/Cargo.toml
+++ b/polkadot/node/core/prospective-parachains/Cargo.toml
@@ -13,7 +13,7 @@ workspace = true
 futures = "0.3.19"
 gum = { package = "tracing-gum", path = "../../gum" }
 parity-scale-codec = "3.6.4"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 fatality = "0.0.6"
 bitvec = "1"
 
diff --git a/polkadot/node/core/provisioner/Cargo.toml b/polkadot/node/core/provisioner/Cargo.toml
index 175980e90a0..24cdfd6b57b 100644
--- a/polkadot/node/core/provisioner/Cargo.toml
+++ b/polkadot/node/core/provisioner/Cargo.toml
@@ -13,7 +13,7 @@ workspace = true
 bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] }
 futures = "0.3.21"
 gum = { package = "tracing-gum", path = "../../gum" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 polkadot-primitives = { path = "../../../primitives" }
 polkadot-node-primitives = { path = "../../primitives" }
 polkadot-node-subsystem = { path = "../../subsystem" }
diff --git a/polkadot/node/core/pvf-checker/Cargo.toml b/polkadot/node/core/pvf-checker/Cargo.toml
index 3f02c2fa74a..f4f954e316c 100644
--- a/polkadot/node/core/pvf-checker/Cargo.toml
+++ b/polkadot/node/core/pvf-checker/Cargo.toml
@@ -11,7 +11,7 @@ workspace = true
 
 [dependencies]
 futures = "0.3.21"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 gum = { package = "tracing-gum", path = "../../gum" }
 
 polkadot-node-primitives = { path = "../../primitives" }
diff --git a/polkadot/node/core/pvf/Cargo.toml b/polkadot/node/core/pvf/Cargo.toml
index d7ea573cfd2..9ed64b88ffd 100644
--- a/polkadot/node/core/pvf/Cargo.toml
+++ b/polkadot/node/core/pvf/Cargo.toml
@@ -23,7 +23,7 @@ pin-project = "1.0.9"
 rand = "0.8.5"
 slotmap = "1.0"
 tempfile = "3.3.0"
-thiserror = "1.0.31"
+thiserror = { workspace = true }
 tokio = { version = "1.24.2", features = ["fs", "process"] }
 
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive"] }
diff --git a/polkadot/node/core/pvf/common/Cargo.toml b/polkadot/node/core/pvf/common/Cargo.toml
index 631d4335b52..56bad9792fa 100644
--- a/polkadot/node/core/pvf/common/Cargo.toml
+++ b/polkadot/node/core/pvf/common/Cargo.toml
@@ -15,7 +15,7 @@ cpu-time = "1.0.0"
 futures = "0.3.21"
 gum = { package = "tracing-gum", path = "../../../gum" }
 libc = "0.2.152"
-thiserror = "1.0.31"
+thiserror = { workspace = true }
 
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive"] }
 
diff --git a/polkadot/node/gum/proc-macro/Cargo.toml b/polkadot/node/gum/proc-macro/Cargo.toml
index 4c81c8314df..70126b4f433 100644
--- a/polkadot/node/gum/proc-macro/Cargo.toml
+++ b/polkadot/node/gum/proc-macro/Cargo.toml
@@ -16,8 +16,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 proc-macro = true
 
 [dependencies]
-syn = { version = "2.0.49", features = ["extra-traits", "full"] }
-quote = "1.0.28"
+syn = { features = ["extra-traits", "full"], workspace = true }
+quote = { workspace = true }
 proc-macro2 = "1.0.56"
 proc-macro-crate = "3.0.0"
 expander = "2.0.0"
diff --git a/polkadot/node/jaeger/Cargo.toml b/polkadot/node/jaeger/Cargo.toml
index c8fd3d46283..23ab8f84210 100644
--- a/polkadot/node/jaeger/Cargo.toml
+++ b/polkadot/node/jaeger/Cargo.toml
@@ -17,7 +17,7 @@ polkadot-primitives = { path = "../../primitives" }
 polkadot-node-primitives = { path = "../primitives" }
 sc-network = { path = "../../../substrate/client/network" }
 sp-core = { path = "../../../substrate/primitives/core" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 tokio = "1.24.2"
 log = { workspace = true, default-features = true }
 parity-scale-codec = { version = "3.6.1", default-features = false }
diff --git a/polkadot/node/network/availability-distribution/Cargo.toml b/polkadot/node/network/availability-distribution/Cargo.toml
index a1484429ed6..432501ed23f 100644
--- a/polkadot/node/network/availability-distribution/Cargo.toml
+++ b/polkadot/node/network/availability-distribution/Cargo.toml
@@ -21,7 +21,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" }
 polkadot-node-primitives = { path = "../../primitives" }
 sp-core = { path = "../../../../substrate/primitives/core", features = ["std"] }
 sp-keystore = { path = "../../../../substrate/primitives/keystore" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 rand = "0.8.5"
 derive_more = "0.99.17"
 schnellru = "0.2.1"
diff --git a/polkadot/node/network/availability-recovery/Cargo.toml b/polkadot/node/network/availability-recovery/Cargo.toml
index e86445730ff..9eddf5c86d2 100644
--- a/polkadot/node/network/availability-recovery/Cargo.toml
+++ b/polkadot/node/network/availability-recovery/Cargo.toml
@@ -15,7 +15,7 @@ tokio = "1.24.2"
 schnellru = "0.2.1"
 rand = "0.8.5"
 fatality = "0.0.6"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 async-trait = "0.1.74"
 gum = { package = "tracing-gum", path = "../../gum" }
 
diff --git a/polkadot/node/network/bridge/Cargo.toml b/polkadot/node/network/bridge/Cargo.toml
index 0cdd7bfbcb1..2e889fc30eb 100644
--- a/polkadot/node/network/bridge/Cargo.toml
+++ b/polkadot/node/network/bridge/Cargo.toml
@@ -25,7 +25,7 @@ polkadot-overseer = { path = "../../overseer" }
 parking_lot = "0.12.1"
 bytes = "1"
 fatality = "0.0.6"
-thiserror = "1"
+thiserror = { workspace = true }
 
 [dev-dependencies]
 assert_matches = "1.4.0"
diff --git a/polkadot/node/network/collator-protocol/Cargo.toml b/polkadot/node/network/collator-protocol/Cargo.toml
index f88e8182ecc..f0f8be0f7ba 100644
--- a/polkadot/node/network/collator-protocol/Cargo.toml
+++ b/polkadot/node/network/collator-protocol/Cargo.toml
@@ -25,7 +25,7 @@ polkadot-node-primitives = { path = "../../primitives" }
 polkadot-node-subsystem-util = { path = "../../subsystem-util" }
 polkadot-node-subsystem = { path = "../../subsystem" }
 fatality = "0.0.6"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 tokio-util = "0.7.1"
 
 [dev-dependencies]
diff --git a/polkadot/node/network/dispute-distribution/Cargo.toml b/polkadot/node/network/dispute-distribution/Cargo.toml
index 319b743aa58..14d59d04f2b 100644
--- a/polkadot/node/network/dispute-distribution/Cargo.toml
+++ b/polkadot/node/network/dispute-distribution/Cargo.toml
@@ -24,7 +24,7 @@ polkadot-node-primitives = { path = "../../primitives" }
 sc-network = { path = "../../../../substrate/client/network" }
 sp-application-crypto = { path = "../../../../substrate/primitives/application-crypto" }
 sp-keystore = { path = "../../../../substrate/primitives/keystore" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 fatality = "0.0.6"
 schnellru = "0.2.1"
 indexmap = "2.0.0"
diff --git a/polkadot/node/network/protocol/Cargo.toml b/polkadot/node/network/protocol/Cargo.toml
index a8b0cf2737e..7efa0b8ca82 100644
--- a/polkadot/node/network/protocol/Cargo.toml
+++ b/polkadot/node/network/protocol/Cargo.toml
@@ -21,7 +21,7 @@ sc-network = { path = "../../../../substrate/client/network" }
 sc-authority-discovery = { path = "../../../../substrate/client/authority-discovery" }
 strum = { version = "0.24", features = ["derive"] }
 futures = "0.3.21"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 fatality = "0.0.6"
 rand = "0.8"
 derive_more = "0.99"
diff --git a/polkadot/node/network/statement-distribution/Cargo.toml b/polkadot/node/network/statement-distribution/Cargo.toml
index b07d84390dc..01f7d818c1c 100644
--- a/polkadot/node/network/statement-distribution/Cargo.toml
+++ b/polkadot/node/network/statement-distribution/Cargo.toml
@@ -23,7 +23,7 @@ polkadot-node-network-protocol = { path = "../protocol" }
 arrayvec = "0.7.4"
 indexmap = "2.0.0"
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive"] }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 fatality = "0.0.6"
 bitvec = "1"
 
diff --git a/polkadot/node/primitives/Cargo.toml b/polkadot/node/primitives/Cargo.toml
index b5560929b2e..b4541bcc346 100644
--- a/polkadot/node/primitives/Cargo.toml
+++ b/polkadot/node/primitives/Cargo.toml
@@ -22,9 +22,9 @@ sp-maybe-compressed-blob = { path = "../../../substrate/primitives/maybe-compres
 sp-runtime = { path = "../../../substrate/primitives/runtime" }
 polkadot-parachain-primitives = { path = "../../parachain", default-features = false }
 schnorrkel = "0.11.4"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] }
-serde = { version = "1.0.196", features = ["derive"] }
+serde = { features = ["derive"], workspace = true, default-features = true }
 
 [target.'cfg(not(target_os = "unknown"))'.dependencies]
 zstd = { version = "0.12.4", default-features = false }
diff --git a/polkadot/node/service/Cargo.toml b/polkadot/node/service/Cargo.toml
index dc6acd506c8..8fd9f20b7bc 100644
--- a/polkadot/node/service/Cargo.toml
+++ b/polkadot/node/service/Cargo.toml
@@ -85,9 +85,9 @@ is_executable = "1.0.1"
 gum = { package = "tracing-gum", path = "../gum" }
 log = { workspace = true, default-features = true }
 schnellru = "0.2.1"
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
-thiserror = "1.0.48"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 kvdb = "0.13.0"
 kvdb-rocksdb = { version = "0.19.0", optional = true }
 parity-db = { version = "0.4.12", optional = true }
diff --git a/polkadot/node/subsystem-bench/Cargo.toml b/polkadot/node/subsystem-bench/Cargo.toml
index 203cfe05db1..7de91d8cd5d 100644
--- a/polkadot/node/subsystem-bench/Cargo.toml
+++ b/polkadot/node/subsystem-bench/Cargo.toml
@@ -65,8 +65,8 @@ itertools = "0.11.0"
 polkadot-primitives-test-helpers = { path = "../../primitives/test-helpers" }
 prometheus_endpoint = { package = "substrate-prometheus-endpoint", path = "../../../substrate/utils/prometheus" }
 prometheus = { version = "0.13.0", default-features = false }
-serde = "1.0.196"
-serde_yaml = "0.9"
+serde = { workspace = true, default-features = true }
+serde_yaml = { workspace = true }
 
 polkadot-node-core-approval-voting = { path = "../core/approval-voting" }
 polkadot-approval-distribution = { path = "../network/approval-distribution" }
diff --git a/polkadot/node/subsystem-types/Cargo.toml b/polkadot/node/subsystem-types/Cargo.toml
index ffd05cca2e9..54c8f7e2ade 100644
--- a/polkadot/node/subsystem-types/Cargo.toml
+++ b/polkadot/node/subsystem-types/Cargo.toml
@@ -28,6 +28,6 @@ sc-client-api = { path = "../../../substrate/client/api" }
 sc-transaction-pool-api = { path = "../../../substrate/client/transaction-pool/api" }
 smallvec = "1.8.0"
 substrate-prometheus-endpoint = { path = "../../../substrate/utils/prometheus" }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 async-trait = "0.1.74"
 bitvec = { version = "1.0.0", default-features = false, features = ["alloc"] }
diff --git a/polkadot/node/subsystem-util/Cargo.toml b/polkadot/node/subsystem-util/Cargo.toml
index b2a643d92f6..a668f8de76a 100644
--- a/polkadot/node/subsystem-util/Cargo.toml
+++ b/polkadot/node/subsystem-util/Cargo.toml
@@ -18,7 +18,7 @@ parity-scale-codec = { version = "3.6.1", default-features = false, features = [
 parking_lot = "0.12.1"
 pin-project = "1.0.9"
 rand = "0.8.5"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 fatality = "0.0.6"
 gum = { package = "tracing-gum", path = "../gum" }
 derive_more = "0.99.17"
diff --git a/polkadot/node/test/service/Cargo.toml b/polkadot/node/test/service/Cargo.toml
index 47a754892ed..e7892abcd87 100644
--- a/polkadot/node/test/service/Cargo.toml
+++ b/polkadot/node/test/service/Cargo.toml
@@ -14,7 +14,7 @@ futures = "0.3.21"
 hex = "0.4.3"
 gum = { package = "tracing-gum", path = "../../gum" }
 rand = "0.8.5"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 tempfile = "3.2.0"
 tokio = "1.24.2"
 
diff --git a/polkadot/node/zombienet-backchannel/Cargo.toml b/polkadot/node/zombienet-backchannel/Cargo.toml
index ec0521a592d..fa99490a997 100644
--- a/polkadot/node/zombienet-backchannel/Cargo.toml
+++ b/polkadot/node/zombienet-backchannel/Cargo.toml
@@ -19,7 +19,7 @@ futures-util = "0.3.30"
 lazy_static = "1.4.0"
 parity-scale-codec = { version = "3.6.1", features = ["derive"] }
 reqwest = { version = "0.11", features = ["rustls-tls"], default-features = false }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 gum = { package = "tracing-gum", path = "../gum" }
-serde = { version = "1.0", features = ["derive"] }
-serde_json = "1.0.113"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
diff --git a/polkadot/parachain/Cargo.toml b/polkadot/parachain/Cargo.toml
index 843c4fe3e95..d8c3cea7ad8 100644
--- a/polkadot/parachain/Cargo.toml
+++ b/polkadot/parachain/Cargo.toml
@@ -24,7 +24,7 @@ derive_more = "0.99.11"
 bounded-collections = { version = "0.2.0", default-features = false, features = ["serde"] }
 
 # all optional crates.
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 
 [features]
 default = ["std"]
diff --git a/polkadot/primitives/Cargo.toml b/polkadot/primitives/Cargo.toml
index fa3e949d691..58d3d100161 100644
--- a/polkadot/primitives/Cargo.toml
+++ b/polkadot/primitives/Cargo.toml
@@ -14,7 +14,7 @@ bitvec = { version = "1.0.0", default-features = false, features = ["alloc", "se
 hex-literal = "0.4.1"
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["bit-vec", "derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["bit-vec", "derive", "serde"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 
 application-crypto = { package = "sp-application-crypto", path = "../../substrate/primitives/application-crypto", default-features = false, features = ["serde"] }
 inherents = { package = "sp-inherents", path = "../../substrate/primitives/inherents", default-features = false }
diff --git a/polkadot/runtime/common/Cargo.toml b/polkadot/runtime/common/Cargo.toml
index 52fbfd9ac77..2467d123f02 100644
--- a/polkadot/runtime/common/Cargo.toml
+++ b/polkadot/runtime/common/Cargo.toml
@@ -16,8 +16,8 @@ parity-scale-codec = { version = "3.6.1", default-features = false, features = [
 log = { workspace = true }
 rustc-hex = { version = "2.1.0", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc"] }
-serde_derive = { version = "1.0.117" }
+serde = { features = ["alloc"], workspace = true }
+serde_derive = { workspace = true }
 static_assertions = "1.1.0"
 
 sp-api = { path = "../../../substrate/primitives/api", default-features = false }
@@ -69,7 +69,7 @@ pallet-babe = { path = "../../../substrate/frame/babe" }
 pallet-treasury = { path = "../../../substrate/frame/treasury" }
 sp-keystore = { path = "../../../substrate/primitives/keystore" }
 sp-keyring = { path = "../../../substrate/primitives/keyring" }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 libsecp256k1 = "0.7.0"
 test-helpers = { package = "polkadot-primitives-test-helpers", path = "../../primitives/test-helpers" }
 
diff --git a/polkadot/runtime/parachains/Cargo.toml b/polkadot/runtime/parachains/Cargo.toml
index 1de34400758..311a62b6c91 100644
--- a/polkadot/runtime/parachains/Cargo.toml
+++ b/polkadot/runtime/parachains/Cargo.toml
@@ -16,7 +16,7 @@ parity-scale-codec = { version = "3.6.1", default-features = false, features = [
 log = { workspace = true }
 rustc-hex = { version = "2.1.0", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 derive_more = "0.99.17"
 bitflags = "1.3.2"
 
@@ -69,7 +69,7 @@ sp-tracing = { path = "../../../substrate/primitives/tracing" }
 sp-crypto-hashing = { path = "../../../substrate/primitives/crypto/hashing" }
 thousands = "0.2.0"
 assert_matches = "1"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 [features]
 default = ["std"]
diff --git a/polkadot/runtime/rococo/Cargo.toml b/polkadot/runtime/rococo/Cargo.toml
index 68ded4aeaec..3dc59cc1728 100644
--- a/polkadot/runtime/rococo/Cargo.toml
+++ b/polkadot/runtime/rococo/Cargo.toml
@@ -14,8 +14,8 @@ workspace = true
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 log = { workspace = true }
-serde = { version = "1.0.196", default-features = false }
-serde_derive = { version = "1.0.117", optional = true }
+serde = { workspace = true }
+serde_derive = { optional = true, workspace = true }
 static_assertions = "1.1.0"
 smallvec = "1.8.0"
 
@@ -111,7 +111,7 @@ keyring = { package = "sp-keyring", path = "../../../substrate/primitives/keyrin
 remote-externalities = { package = "frame-remote-externalities", path = "../../../substrate/utils/frame/remote-externalities" }
 sp-trie = { path = "../../../substrate/primitives/trie" }
 separator = "0.4.1"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 sp-tracing = { path = "../../../substrate/primitives/tracing", default-features = false }
 tokio = { version = "1.24.2", features = ["macros"] }
 
diff --git a/polkadot/runtime/test-runtime/Cargo.toml b/polkadot/runtime/test-runtime/Cargo.toml
index 1f041fdfeaa..9753a409304 100644
--- a/polkadot/runtime/test-runtime/Cargo.toml
+++ b/polkadot/runtime/test-runtime/Cargo.toml
@@ -16,8 +16,8 @@ parity-scale-codec = { version = "3.6.1", default-features = false, features = [
 log = { workspace = true }
 rustc-hex = { version = "2.1.0", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false }
-serde_derive = { version = "1.0.117", optional = true }
+serde = { workspace = true }
+serde_derive = { optional = true, workspace = true }
 smallvec = "1.8.0"
 
 authority-discovery-primitives = { package = "sp-authority-discovery", path = "../../../substrate/primitives/authority-discovery", default-features = false }
@@ -74,7 +74,7 @@ hex-literal = "0.4.1"
 tiny-keccak = { version = "2.0.2", features = ["keccak"] }
 keyring = { package = "sp-keyring", path = "../../../substrate/primitives/keyring" }
 sp-trie = { path = "../../../substrate/primitives/trie" }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 [build-dependencies]
 substrate-wasm-builder = { path = "../../../substrate/utils/wasm-builder" }
diff --git a/polkadot/runtime/westend/Cargo.toml b/polkadot/runtime/westend/Cargo.toml
index 31b3f8351d8..4180828bcfb 100644
--- a/polkadot/runtime/westend/Cargo.toml
+++ b/polkadot/runtime/westend/Cargo.toml
@@ -16,8 +16,8 @@ parity-scale-codec = { version = "3.6.1", default-features = false, features = [
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 log = { workspace = true }
 rustc-hex = { version = "2.1.0", default-features = false }
-serde = { version = "1.0.196", default-features = false }
-serde_derive = { version = "1.0.117", optional = true }
+serde = { workspace = true }
+serde_derive = { optional = true, workspace = true }
 smallvec = "1.8.0"
 
 authority-discovery-primitives = { package = "sp-authority-discovery", path = "../../../substrate/primitives/authority-discovery", default-features = false }
@@ -119,7 +119,7 @@ xcm-builder = { package = "staging-xcm-builder", path = "../../xcm/xcm-builder",
 hex-literal = "0.4.1"
 tiny-keccak = { version = "2.0.2", features = ["keccak"] }
 keyring = { package = "sp-keyring", path = "../../../substrate/primitives/keyring" }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 remote-externalities = { package = "frame-remote-externalities", path = "../../../substrate/utils/frame/remote-externalities" }
 tokio = { version = "1.24.2", features = ["macros"] }
 sp-tracing = { path = "../../../substrate/primitives/tracing", default-features = false }
diff --git a/polkadot/xcm/Cargo.toml b/polkadot/xcm/Cargo.toml
index 888757150b4..f9ccfb9833a 100644
--- a/polkadot/xcm/Cargo.toml
+++ b/polkadot/xcm/Cargo.toml
@@ -18,7 +18,7 @@ log = { workspace = true }
 parity-scale-codec = { version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive", "serde"] }
 sp-weights = { path = "../../substrate/primitives/weights", default-features = false, features = ["serde"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive", "rc"] }
+serde = { features = ["alloc", "derive", "rc"], workspace = true }
 schemars = { version = "0.8.13", default-features = true, optional = true }
 xcm-procedural = { path = "procedural" }
 environmental = { version = "1.1.4", default-features = false }
diff --git a/polkadot/xcm/pallet-xcm/Cargo.toml b/polkadot/xcm/pallet-xcm/Cargo.toml
index ac39e5f7429..4840b6127f5 100644
--- a/polkadot/xcm/pallet-xcm/Cargo.toml
+++ b/polkadot/xcm/pallet-xcm/Cargo.toml
@@ -13,7 +13,7 @@ workspace = true
 bounded-collections = { version = "0.2.0", default-features = false }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 log = { workspace = true }
 
 frame-support = { path = "../../../substrate/frame/support", default-features = false }
diff --git a/polkadot/xcm/procedural/Cargo.toml b/polkadot/xcm/procedural/Cargo.toml
index 1af4d2db4f1..ca9fb351bd3 100644
--- a/polkadot/xcm/procedural/Cargo.toml
+++ b/polkadot/xcm/procedural/Cargo.toml
@@ -15,8 +15,8 @@ proc-macro = true
 
 [dependencies]
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
-syn = "2.0.49"
+quote = { workspace = true }
+syn = { workspace = true }
 Inflector = "0.11.4"
 
 [dev-dependencies]
diff --git a/substrate/bin/minimal/node/Cargo.toml b/substrate/bin/minimal/node/Cargo.toml
index 02b3b0a735b..65644861c9a 100644
--- a/substrate/bin/minimal/node/Cargo.toml
+++ b/substrate/bin/minimal/node/Cargo.toml
@@ -24,7 +24,7 @@ clap = { version = "4.5.1", features = ["derive"] }
 futures = { version = "0.3.21", features = ["thread-pool"] }
 futures-timer = "3.0.1"
 jsonrpsee = { version = "0.22", features = ["server"] }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 sc-cli = { path = "../../../client/cli" }
 sc-executor = { path = "../../../client/executor" }
diff --git a/substrate/bin/node-template/node/Cargo.toml b/substrate/bin/node-template/node/Cargo.toml
index 7a6955d2cec..9cba2b5a366 100644
--- a/substrate/bin/node-template/node/Cargo.toml
+++ b/substrate/bin/node-template/node/Cargo.toml
@@ -22,7 +22,7 @@ name = "node-template"
 [dependencies]
 clap = { version = "4.5.1", features = ["derive"] }
 futures = { version = "0.3.21", features = ["thread-pool"] }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 sc-cli = { path = "../../../client/cli" }
 sp-core = { path = "../../../primitives/core" }
diff --git a/substrate/bin/node-template/runtime/Cargo.toml b/substrate/bin/node-template/runtime/Cargo.toml
index 95d92e6eadf..86bab0ca375 100644
--- a/substrate/bin/node-template/runtime/Cargo.toml
+++ b/substrate/bin/node-template/runtime/Cargo.toml
@@ -42,7 +42,7 @@ sp-std = { path = "../../../primitives/std", default-features = false }
 sp-storage = { path = "../../../primitives/storage", default-features = false }
 sp-transaction-pool = { path = "../../../primitives/transaction-pool", default-features = false }
 sp-version = { path = "../../../primitives/version", default-features = false, features = ["serde"] }
-serde_json = { version = "1.0.113", default-features = false, features = ["alloc"] }
+serde_json = { features = ["alloc"], workspace = true }
 sp-genesis-builder = { default-features = false, path = "../../../primitives/genesis-builder" }
 
 # Used for the node template's RPCs
diff --git a/substrate/bin/node/bench/Cargo.toml b/substrate/bin/node/bench/Cargo.toml
index ada58c79c77..8e0f7fb93b3 100644
--- a/substrate/bin/node/bench/Cargo.toml
+++ b/substrate/bin/node/bench/Cargo.toml
@@ -24,8 +24,8 @@ kitchensink-runtime = { path = "../runtime" }
 sc-client-api = { path = "../../../client/api" }
 sp-runtime = { path = "../../../primitives/runtime" }
 sp-state-machine = { path = "../../../primitives/state-machine" }
-serde = "1.0.196"
-serde_json = "1.0.113"
+serde = { workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 derive_more = { version = "0.99.17", default-features = false, features = ["display"] }
 kvdb = "0.13.0"
 kvdb-rocksdb = "0.19.0"
diff --git a/substrate/bin/node/cli/Cargo.toml b/substrate/bin/node/cli/Cargo.toml
index aed2101a3f5..abe284c41da 100644
--- a/substrate/bin/node/cli/Cargo.toml
+++ b/substrate/bin/node/cli/Cargo.toml
@@ -43,7 +43,7 @@ crate-type = ["cdylib", "rlib"]
 array-bytes = "6.1"
 clap = { version = "4.5.1", features = ["derive"], optional = true }
 codec = { package = "parity-scale-codec", version = "3.6.1" }
-serde = { version = "1.0.196", features = ["derive"] }
+serde = { features = ["derive"], workspace = true, default-features = true }
 jsonrpsee = { version = "0.22", features = ["server"] }
 futures = "0.3.21"
 log = { workspace = true, default-features = true }
@@ -116,7 +116,7 @@ sc-cli = { path = "../../../client/cli", optional = true }
 frame-benchmarking-cli = { path = "../../../utils/frame/benchmarking-cli", optional = true }
 node-inspect = { package = "staging-node-inspect", path = "../inspect", optional = true }
 try-runtime-cli = { path = "../../../utils/frame/try-runtime/cli", optional = true }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 [dev-dependencies]
 sc-keystore = { path = "../../../client/keystore" }
@@ -159,7 +159,7 @@ sp-consensus-babe = { path = "../../../primitives/consensus/babe" }
 sp-externalities = { path = "../../../primitives/externalities" }
 sp-keyring = { path = "../../../primitives/keyring" }
 sp-runtime = { path = "../../../primitives/runtime" }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 scale-info = { version = "2.10.0", features = ["derive", "serde"] }
 sp-trie = { path = "../../../primitives/trie" }
 sp-state-machine = { path = "../../../primitives/state-machine" }
diff --git a/substrate/bin/node/inspect/Cargo.toml b/substrate/bin/node/inspect/Cargo.toml
index 6c9be0fe1ac..7db6e3efd3a 100644
--- a/substrate/bin/node/inspect/Cargo.toml
+++ b/substrate/bin/node/inspect/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 clap = { version = "4.5.1", features = ["derive"] }
 codec = { package = "parity-scale-codec", version = "3.6.1" }
-thiserror = "1.0"
+thiserror = { workspace = true }
 sc-cli = { path = "../../../client/cli" }
 sc-client-api = { path = "../../../client/api" }
 sc-service = { path = "../../../client/service", default-features = false }
diff --git a/substrate/bin/node/runtime/Cargo.toml b/substrate/bin/node/runtime/Cargo.toml
index 7bc608ba89e..aa13c3d292b 100644
--- a/substrate/bin/node/runtime/Cargo.toml
+++ b/substrate/bin/node/runtime/Cargo.toml
@@ -26,7 +26,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 scale-info = { version = "2.10.0", default-features = false, features = ["derive", "serde"] }
 static_assertions = "1.1.0"
 log = { workspace = true }
-serde_json = { version = "1.0.113", default-features = false, features = ["alloc", "arbitrary_precision"] }
+serde_json = { features = ["alloc", "arbitrary_precision"], workspace = true }
 
 # pallet-asset-conversion: turn on "num-traits" feature
 primitive-types = { version = "0.12.0", default-features = false, features = ["codec", "num-traits", "scale-info"] }
diff --git a/substrate/bin/utils/chain-spec-builder/Cargo.toml b/substrate/bin/utils/chain-spec-builder/Cargo.toml
index 8b3180fbbcd..996372c8a0f 100644
--- a/substrate/bin/utils/chain-spec-builder/Cargo.toml
+++ b/substrate/bin/utils/chain-spec-builder/Cargo.toml
@@ -26,5 +26,5 @@ crate-type = ["rlib"]
 clap = { version = "4.5.1", features = ["derive"] }
 log = { workspace = true, default-features = true }
 sc-chain-spec = { path = "../../../client/chain-spec" }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 sp-tracing = { path = "../../../primitives/tracing" }
diff --git a/substrate/client/allocator/Cargo.toml b/substrate/client/allocator/Cargo.toml
index 662125814fb..2c268b548ea 100644
--- a/substrate/client/allocator/Cargo.toml
+++ b/substrate/client/allocator/Cargo.toml
@@ -18,6 +18,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 log = { workspace = true, default-features = true }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 sp-core = { path = "../../primitives/core" }
 sp-wasm-interface = { path = "../../primitives/wasm-interface" }
diff --git a/substrate/client/api/Cargo.toml b/substrate/client/api/Cargo.toml
index 09f60a47670..cd7b613e277 100644
--- a/substrate/client/api/Cargo.toml
+++ b/substrate/client/api/Cargo.toml
@@ -41,6 +41,6 @@ sp-storage = { path = "../../primitives/storage" }
 sp-trie = { path = "../../primitives/trie" }
 
 [dev-dependencies]
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 sp-test-primitives = { path = "../../primitives/test-primitives" }
 substrate-test-runtime = { path = "../../test-utils/runtime" }
diff --git a/substrate/client/authority-discovery/Cargo.toml b/substrate/client/authority-discovery/Cargo.toml
index 78f7144f436..cdd4052f0b0 100644
--- a/substrate/client/authority-discovery/Cargo.toml
+++ b/substrate/client/authority-discovery/Cargo.toml
@@ -32,7 +32,7 @@ multihash = { version = "0.18.1", default-features = false, features = [
 log = { workspace = true, default-features = true }
 prost = "0.12"
 rand = "0.8.5"
-thiserror = "1.0"
+thiserror = { workspace = true }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" }
 sc-client-api = { path = "../api" }
 sc-network = { path = "../network" }
diff --git a/substrate/client/chain-spec/Cargo.toml b/substrate/client/chain-spec/Cargo.toml
index 82a5f7f55b0..f2138c07d71 100644
--- a/substrate/client/chain-spec/Cargo.toml
+++ b/substrate/client/chain-spec/Cargo.toml
@@ -18,8 +18,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 memmap2 = "0.9.3"
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 sc-client-api = { path = "../api" }
 sc-chain-spec-derive = { path = "derive" }
 sc-executor = { path = "../executor" }
diff --git a/substrate/client/chain-spec/derive/Cargo.toml b/substrate/client/chain-spec/derive/Cargo.toml
index 4e95206df6b..521eee578ec 100644
--- a/substrate/client/chain-spec/derive/Cargo.toml
+++ b/substrate/client/chain-spec/derive/Cargo.toml
@@ -20,5 +20,5 @@ proc-macro = true
 [dependencies]
 proc-macro-crate = "3.0.0"
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
-syn = "2.0.49"
+quote = { workspace = true }
+syn = { workspace = true }
diff --git a/substrate/client/cli/Cargo.toml b/substrate/client/cli/Cargo.toml
index 1b4d3733baa..0582018283c 100644
--- a/substrate/client/cli/Cargo.toml
+++ b/substrate/client/cli/Cargo.toml
@@ -29,9 +29,9 @@ parity-scale-codec = "3.6.1"
 rand = "0.8.5"
 regex = "1.6.0"
 rpassword = "7.0.0"
-serde = "1.0.196"
-serde_json = "1.0.113"
-thiserror = "1.0.48"
+serde = { workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 bip39 = "2.0.0"
 tokio = { version = "1.22.0", features = ["parking_lot", "rt-multi-thread", "signal"] }
 sc-client-api = { path = "../api" }
diff --git a/substrate/client/consensus/aura/Cargo.toml b/substrate/client/consensus/aura/Cargo.toml
index d1076da35f9..213f75974da 100644
--- a/substrate/client/consensus/aura/Cargo.toml
+++ b/substrate/client/consensus/aura/Cargo.toml
@@ -20,7 +20,7 @@ async-trait = "0.1.74"
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 futures = "0.3.21"
 log = { workspace = true, default-features = true }
-thiserror = "1.0"
+thiserror = { workspace = true }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus" }
 sc-block-builder = { path = "../../block-builder" }
 sc-client-api = { path = "../../api" }
diff --git a/substrate/client/consensus/babe/Cargo.toml b/substrate/client/consensus/babe/Cargo.toml
index 9bfed7e541b..c98fb7112b7 100644
--- a/substrate/client/consensus/babe/Cargo.toml
+++ b/substrate/client/consensus/babe/Cargo.toml
@@ -25,7 +25,7 @@ num-bigint = "0.4.3"
 num-rational = "0.4.1"
 num-traits = "0.2.17"
 parking_lot = "0.12.1"
-thiserror = "1.0"
+thiserror = { workspace = true }
 fork-tree = { path = "../../../utils/fork-tree" }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus" }
 sc-client-api = { path = "../../api" }
diff --git a/substrate/client/consensus/babe/rpc/Cargo.toml b/substrate/client/consensus/babe/rpc/Cargo.toml
index 342c9259cc6..043b566673e 100644
--- a/substrate/client/consensus/babe/rpc/Cargo.toml
+++ b/substrate/client/consensus/babe/rpc/Cargo.toml
@@ -18,8 +18,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 jsonrpsee = { version = "0.22", features = ["client-core", "macros", "server"] }
 futures = "0.3.21"
-serde = { version = "1.0.196", features = ["derive"] }
-thiserror = "1.0"
+serde = { features = ["derive"], workspace = true, default-features = true }
+thiserror = { workspace = true }
 sc-consensus-babe = { path = ".." }
 sc-consensus-epochs = { path = "../../epochs" }
 sc-rpc-api = { path = "../../../rpc-api" }
@@ -33,7 +33,7 @@ sp-keystore = { path = "../../../../primitives/keystore" }
 sp-runtime = { path = "../../../../primitives/runtime" }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 tokio = "1.22.0"
 sc-consensus = { path = "../../common" }
 sc-keystore = { path = "../../../keystore" }
diff --git a/substrate/client/consensus/beefy/Cargo.toml b/substrate/client/consensus/beefy/Cargo.toml
index d6b8a57b988..8552a490022 100644
--- a/substrate/client/consensus/beefy/Cargo.toml
+++ b/substrate/client/consensus/beefy/Cargo.toml
@@ -20,7 +20,7 @@ fnv = "1.0.6"
 futures = "0.3"
 log = { workspace = true, default-features = true }
 parking_lot = "0.12.1"
-thiserror = "1.0"
+thiserror = { workspace = true }
 wasm-timer = "0.2.5"
 prometheus = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus" }
 sc-client-api = { path = "../../api" }
@@ -44,7 +44,7 @@ tokio = "1.22.0"
 
 
 [dev-dependencies]
-serde = "1.0.196"
+serde = { workspace = true, default-features = true }
 tempfile = "3.1.0"
 sc-block-builder = { path = "../../block-builder" }
 sc-network-test = { path = "../../network/test" }
diff --git a/substrate/client/consensus/beefy/rpc/Cargo.toml b/substrate/client/consensus/beefy/rpc/Cargo.toml
index e83c95ab106..bb2ae4a0896 100644
--- a/substrate/client/consensus/beefy/rpc/Cargo.toml
+++ b/substrate/client/consensus/beefy/rpc/Cargo.toml
@@ -17,8 +17,8 @@ futures = "0.3.21"
 jsonrpsee = { version = "0.22", features = ["client-core", "macros", "server"] }
 log = { workspace = true, default-features = true }
 parking_lot = "0.12.1"
-serde = { version = "1.0.196", features = ["derive"] }
-thiserror = "1.0"
+serde = { features = ["derive"], workspace = true, default-features = true }
+thiserror = { workspace = true }
 sc-consensus-beefy = { path = ".." }
 sp-consensus-beefy = { path = "../../../../primitives/consensus/beefy" }
 sc-rpc = { path = "../../../rpc" }
@@ -26,7 +26,7 @@ sp-core = { path = "../../../../primitives/core" }
 sp-runtime = { path = "../../../../primitives/runtime" }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 sc-rpc = { path = "../../../rpc", features = ["test-helpers"] }
 substrate-test-runtime-client = { path = "../../../../test-utils/runtime/client" }
 tokio = { version = "1.22.0", features = ["macros"] }
diff --git a/substrate/client/consensus/common/Cargo.toml b/substrate/client/consensus/common/Cargo.toml
index 496e6c82740..7f36dfc09ef 100644
--- a/substrate/client/consensus/common/Cargo.toml
+++ b/substrate/client/consensus/common/Cargo.toml
@@ -23,8 +23,8 @@ libp2p-identity = { version = "0.1.3", features = ["ed25519", "peerid"] }
 log = { workspace = true, default-features = true }
 mockall = "0.11.3"
 parking_lot = "0.12.1"
-serde = { version = "1.0", features = ["derive"] }
-thiserror = "1.0.48"
+serde = { features = ["derive"], workspace = true, default-features = true }
+thiserror = { workspace = true }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus" }
 sc-client-api = { path = "../../api" }
 sc-utils = { path = "../../utils" }
diff --git a/substrate/client/consensus/grandpa/Cargo.toml b/substrate/client/consensus/grandpa/Cargo.toml
index e342377d820..1ab95352522 100644
--- a/substrate/client/consensus/grandpa/Cargo.toml
+++ b/substrate/client/consensus/grandpa/Cargo.toml
@@ -28,8 +28,8 @@ log = { workspace = true, default-features = true }
 parity-scale-codec = { version = "3.6.1", features = ["derive"] }
 parking_lot = "0.12.1"
 rand = "0.8.5"
-serde_json = "1.0.113"
-thiserror = "1.0"
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 fork-tree = { path = "../../../utils/fork-tree" }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus" }
 sc-block-builder = { path = "../../block-builder" }
@@ -57,7 +57,7 @@ sp-runtime = { path = "../../../primitives/runtime" }
 [dev-dependencies]
 assert_matches = "1.3.0"
 finality-grandpa = { version = "0.16.2", features = ["derive-codec", "test-helpers"] }
-serde = "1.0.196"
+serde = { workspace = true, default-features = true }
 tokio = "1.22.0"
 sc-network = { path = "../../network" }
 sc-network-test = { path = "../../network/test" }
diff --git a/substrate/client/consensus/grandpa/rpc/Cargo.toml b/substrate/client/consensus/grandpa/rpc/Cargo.toml
index ca0c2ac371a..f7e87415448 100644
--- a/substrate/client/consensus/grandpa/rpc/Cargo.toml
+++ b/substrate/client/consensus/grandpa/rpc/Cargo.toml
@@ -18,8 +18,8 @@ futures = "0.3.16"
 jsonrpsee = { version = "0.22", features = ["client-core", "macros", "server"] }
 log = { workspace = true, default-features = true }
 parity-scale-codec = { version = "3.6.1", features = ["derive"] }
-serde = { version = "1.0.196", features = ["derive"] }
-thiserror = "1.0"
+serde = { features = ["derive"], workspace = true, default-features = true }
+thiserror = { workspace = true }
 sc-client-api = { path = "../../../api" }
 sc-consensus-grandpa = { path = ".." }
 sc-rpc = { path = "../../../rpc" }
diff --git a/substrate/client/consensus/manual-seal/Cargo.toml b/substrate/client/consensus/manual-seal/Cargo.toml
index 51745c996aa..ac32fed7228 100644
--- a/substrate/client/consensus/manual-seal/Cargo.toml
+++ b/substrate/client/consensus/manual-seal/Cargo.toml
@@ -23,8 +23,8 @@ codec = { package = "parity-scale-codec", version = "3.6.1" }
 futures = "0.3.21"
 futures-timer = "3.0.1"
 log = { workspace = true, default-features = true }
-serde = { version = "1.0", features = ["derive"] }
-thiserror = "1.0"
+serde = { features = ["derive"], workspace = true, default-features = true }
+thiserror = { workspace = true }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus" }
 sc-client-api = { path = "../../api" }
 sc-consensus = { path = "../common" }
diff --git a/substrate/client/consensus/pow/Cargo.toml b/substrate/client/consensus/pow/Cargo.toml
index 6caccb9879d..0791514035b 100644
--- a/substrate/client/consensus/pow/Cargo.toml
+++ b/substrate/client/consensus/pow/Cargo.toml
@@ -22,7 +22,7 @@ futures = "0.3.21"
 futures-timer = "3.0.1"
 log = { workspace = true, default-features = true }
 parking_lot = "0.12.1"
-thiserror = "1.0"
+thiserror = { workspace = true }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../../utils/prometheus" }
 sc-client-api = { path = "../../api" }
 sc-consensus = { path = "../common" }
diff --git a/substrate/client/executor/common/Cargo.toml b/substrate/client/executor/common/Cargo.toml
index 648fb9f0f50..bfd1fa6b740 100644
--- a/substrate/client/executor/common/Cargo.toml
+++ b/substrate/client/executor/common/Cargo.toml
@@ -17,7 +17,7 @@ workspace = true
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 wasm-instrument = "0.4"
 sc-allocator = { path = "../../allocator" }
 sp-maybe-compressed-blob = { path = "../../../primitives/maybe-compressed-blob" }
diff --git a/substrate/client/keystore/Cargo.toml b/substrate/client/keystore/Cargo.toml
index f7f3b138ec8..908e0aa8f38 100644
--- a/substrate/client/keystore/Cargo.toml
+++ b/substrate/client/keystore/Cargo.toml
@@ -19,8 +19,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 array-bytes = "6.1"
 parking_lot = "0.12.1"
-serde_json = "1.0.113"
-thiserror = "1.0"
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 sp-application-crypto = { path = "../../primitives/application-crypto" }
 sp-core = { path = "../../primitives/core" }
 sp-keystore = { path = "../../primitives/keystore" }
diff --git a/substrate/client/merkle-mountain-range/rpc/Cargo.toml b/substrate/client/merkle-mountain-range/rpc/Cargo.toml
index 901c573b6bd..9b391b76ea0 100644
--- a/substrate/client/merkle-mountain-range/rpc/Cargo.toml
+++ b/substrate/client/merkle-mountain-range/rpc/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 jsonrpsee = { version = "0.22", features = ["client-core", "macros", "server"] }
-serde = { version = "1.0.196", features = ["derive"] }
+serde = { features = ["derive"], workspace = true, default-features = true }
 sp-api = { path = "../../../primitives/api" }
 sp-blockchain = { path = "../../../primitives/blockchain" }
 sp-core = { path = "../../../primitives/core" }
@@ -25,4 +25,4 @@ sp-mmr-primitives = { path = "../../../primitives/merkle-mountain-range" }
 sp-runtime = { path = "../../../primitives/runtime" }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
diff --git a/substrate/client/mixnet/Cargo.toml b/substrate/client/mixnet/Cargo.toml
index 8bcd963bd56..736184f4668 100644
--- a/substrate/client/mixnet/Cargo.toml
+++ b/substrate/client/mixnet/Cargo.toml
@@ -37,4 +37,4 @@ sp-core = { path = "../../primitives/core" }
 sp-keystore = { path = "../../primitives/keystore" }
 sp-mixnet = { path = "../../primitives/mixnet" }
 sp-runtime = { path = "../../primitives/runtime" }
-thiserror = "1.0"
+thiserror = { workspace = true }
diff --git a/substrate/client/network/Cargo.toml b/substrate/client/network/Cargo.toml
index d2ca8ba8c3f..cbf74440dc1 100644
--- a/substrate/client/network/Cargo.toml
+++ b/substrate/client/network/Cargo.toml
@@ -36,10 +36,10 @@ parking_lot = "0.12.1"
 partial_sort = "0.2.0"
 pin-project = "1.0.12"
 rand = "0.8.5"
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 smallvec = "1.11.0"
-thiserror = "1.0"
+thiserror = { workspace = true }
 tokio = { version = "1.22.0", features = ["macros", "sync"] }
 tokio-stream = "0.1.7"
 unsigned-varint = { version = "0.7.1", features = ["asynchronous_codec", "futures"] }
diff --git a/substrate/client/network/bitswap/Cargo.toml b/substrate/client/network/bitswap/Cargo.toml
index 63544b069e5..7ef3ea21242 100644
--- a/substrate/client/network/bitswap/Cargo.toml
+++ b/substrate/client/network/bitswap/Cargo.toml
@@ -25,7 +25,7 @@ futures = "0.3.21"
 libp2p-identity = { version = "0.1.3", features = ["peerid"] }
 log = { workspace = true, default-features = true }
 prost = "0.12"
-thiserror = "1.0"
+thiserror = { workspace = true }
 unsigned-varint = { version = "0.7.1", features = ["asynchronous_codec", "futures"] }
 sc-client-api = { path = "../../api" }
 sc-network = { path = ".." }
diff --git a/substrate/client/network/light/Cargo.toml b/substrate/client/network/light/Cargo.toml
index a83be7538be..c757f727fb7 100644
--- a/substrate/client/network/light/Cargo.toml
+++ b/substrate/client/network/light/Cargo.toml
@@ -33,4 +33,4 @@ sc-client-api = { path = "../../api" }
 sc-network = { path = ".." }
 sp-core = { path = "../../../primitives/core" }
 sp-runtime = { path = "../../../primitives/runtime" }
-thiserror = "1.0"
+thiserror = { workspace = true }
diff --git a/substrate/client/network/sync/Cargo.toml b/substrate/client/network/sync/Cargo.toml
index 19f86e87ac5..32ba3b6356c 100644
--- a/substrate/client/network/sync/Cargo.toml
+++ b/substrate/client/network/sync/Cargo.toml
@@ -31,7 +31,7 @@ mockall = "0.11.3"
 prost = "0.12"
 schnellru = "0.2.1"
 smallvec = "1.11.0"
-thiserror = "1.0"
+thiserror = { workspace = true }
 tokio-stream = "0.1.14"
 tokio = { version = "1.32.0", features = ["macros", "time"] }
 fork-tree = { path = "../../../utils/fork-tree" }
diff --git a/substrate/client/rpc-api/Cargo.toml b/substrate/client/rpc-api/Cargo.toml
index 27f8a1b9062..1b7af6a4a52 100644
--- a/substrate/client/rpc-api/Cargo.toml
+++ b/substrate/client/rpc-api/Cargo.toml
@@ -18,9 +18,9 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
-thiserror = "1.0"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 sc-chain-spec = { path = "../chain-spec" }
 sc-mixnet = { path = "../mixnet" }
 sc-transaction-pool-api = { path = "../transaction-pool/api" }
diff --git a/substrate/client/rpc-servers/Cargo.toml b/substrate/client/rpc-servers/Cargo.toml
index 3e04b927a22..7f7a86799e0 100644
--- a/substrate/client/rpc-servers/Cargo.toml
+++ b/substrate/client/rpc-servers/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 jsonrpsee = { version = "0.22", features = ["server"] }
 log = { workspace = true, default-features = true }
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 tokio = { version = "1.22.0", features = ["parking_lot"] }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" }
 tower-http = { version = "0.4.0", features = ["cors"] }
diff --git a/substrate/client/rpc-spec-v2/Cargo.toml b/substrate/client/rpc-spec-v2/Cargo.toml
index cb109becaf2..c62b3e789d3 100644
--- a/substrate/client/rpc-spec-v2/Cargo.toml
+++ b/substrate/client/rpc-spec-v2/Cargo.toml
@@ -31,8 +31,8 @@ sc-client-api = { path = "../api" }
 sc-utils = { path = "../utils" }
 sc-rpc = { path = "../rpc" }
 codec = { package = "parity-scale-codec", version = "3.6.1" }
-thiserror = "1.0"
-serde = "1.0"
+thiserror = { workspace = true }
+serde = { workspace = true, default-features = true }
 hex = "0.4"
 futures = "0.3.21"
 parking_lot = "0.12.1"
@@ -44,7 +44,7 @@ futures-util = { version = "0.3.30", default-features = false }
 rand = "0.8.5"
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 tokio = { version = "1.22.0", features = ["macros"] }
 substrate-test-runtime-client = { path = "../../test-utils/runtime/client" }
 substrate-test-runtime = { path = "../../test-utils/runtime" }
diff --git a/substrate/client/rpc/Cargo.toml b/substrate/client/rpc/Cargo.toml
index aa97eb87bb5..f65e6c9a59e 100644
--- a/substrate/client/rpc/Cargo.toml
+++ b/substrate/client/rpc/Cargo.toml
@@ -21,7 +21,7 @@ futures = "0.3.21"
 jsonrpsee = { version = "0.22", features = ["server"] }
 log = { workspace = true, default-features = true }
 parking_lot = "0.12.1"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 sc-block-builder = { path = "../block-builder" }
 sc-chain-spec = { path = "../chain-spec" }
 sc-client-api = { path = "../api" }
diff --git a/substrate/client/service/Cargo.toml b/substrate/client/service/Cargo.toml
index a6fa360b74f..73edceb2ef3 100644
--- a/substrate/client/service/Cargo.toml
+++ b/substrate/client/service/Cargo.toml
@@ -29,7 +29,7 @@ runtime-benchmarks = [
 
 [dependencies]
 jsonrpsee = { version = "0.22", features = ["server"] }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 futures = "0.3.21"
 rand = "0.8.5"
 parking_lot = "0.12.1"
@@ -37,8 +37,8 @@ log = { workspace = true, default-features = true }
 futures-timer = "3.0.1"
 exit-future = "0.2.0"
 pin-project = "1.0.12"
-serde = "1.0.196"
-serde_json = "1.0.113"
+serde = { workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 sc-keystore = { path = "../keystore" }
 sp-runtime = { path = "../../primitives/runtime" }
 sp-trie = { path = "../../primitives/trie" }
diff --git a/substrate/client/storage-monitor/Cargo.toml b/substrate/client/storage-monitor/Cargo.toml
index b0f04644142..b2120b3efc4 100644
--- a/substrate/client/storage-monitor/Cargo.toml
+++ b/substrate/client/storage-monitor/Cargo.toml
@@ -17,4 +17,4 @@ log = { workspace = true, default-features = true }
 fs4 = "0.7.0"
 sp-core = { path = "../../primitives/core" }
 tokio = { version = "1.22.0", features = ["time"] }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
diff --git a/substrate/client/sync-state-rpc/Cargo.toml b/substrate/client/sync-state-rpc/Cargo.toml
index fc0efd6630c..09dc611caa0 100644
--- a/substrate/client/sync-state-rpc/Cargo.toml
+++ b/substrate/client/sync-state-rpc/Cargo.toml
@@ -17,9 +17,9 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 jsonrpsee = { version = "0.22", features = ["client-core", "macros", "server"] }
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
-thiserror = "1.0.48"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 sc-chain-spec = { path = "../chain-spec" }
 sc-client-api = { path = "../api" }
 sc-consensus-babe = { path = "../consensus/babe" }
diff --git a/substrate/client/sysinfo/Cargo.toml b/substrate/client/sysinfo/Cargo.toml
index ede0bccaedc..ba58452ffb5 100644
--- a/substrate/client/sysinfo/Cargo.toml
+++ b/substrate/client/sysinfo/Cargo.toml
@@ -24,8 +24,8 @@ rand = "0.8.5"
 rand_pcg = "0.3.1"
 derive_more = "0.99"
 regex = "1"
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 sc-telemetry = { path = "../telemetry" }
 sp-core = { path = "../../primitives/core" }
 sp-crypto-hashing = { path = "../../primitives/crypto/hashing" }
diff --git a/substrate/client/telemetry/Cargo.toml b/substrate/client/telemetry/Cargo.toml
index e35fbc16142..8ab00202f0b 100644
--- a/substrate/client/telemetry/Cargo.toml
+++ b/substrate/client/telemetry/Cargo.toml
@@ -25,7 +25,7 @@ parking_lot = "0.12.1"
 pin-project = "1.0.12"
 sc-utils = { path = "../utils" }
 rand = "0.8.5"
-serde = { version = "1.0.196", features = ["derive"] }
-serde_json = "1.0.113"
-thiserror = "1.0.48"
+serde = { features = ["derive"], workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 wasm-timer = "0.2.5"
diff --git a/substrate/client/tracing/Cargo.toml b/substrate/client/tracing/Cargo.toml
index bd5a661bb3a..61e6f7d0bab 100644
--- a/substrate/client/tracing/Cargo.toml
+++ b/substrate/client/tracing/Cargo.toml
@@ -26,8 +26,8 @@ log = { workspace = true, default-features = true }
 parking_lot = "0.12.1"
 regex = "1.6.0"
 rustc-hash = "1.1.0"
-serde = "1.0.196"
-thiserror = "1.0.48"
+serde = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 tracing = "0.1.29"
 tracing-log = "0.1.3"
 tracing-subscriber = { version = "0.2.25", features = ["parking_lot"] }
diff --git a/substrate/client/tracing/proc-macro/Cargo.toml b/substrate/client/tracing/proc-macro/Cargo.toml
index aa6ae7d6fd4..fec34aa0bca 100644
--- a/substrate/client/tracing/proc-macro/Cargo.toml
+++ b/substrate/client/tracing/proc-macro/Cargo.toml
@@ -20,5 +20,5 @@ proc-macro = true
 [dependencies]
 proc-macro-crate = "3.0.0"
 proc-macro2 = "1.0.56"
-quote = { version = "1.0.28", features = ["proc-macro"] }
-syn = { version = "2.0.49", features = ["extra-traits", "full", "parsing", "proc-macro"] }
+quote = { features = ["proc-macro"], workspace = true }
+syn = { features = ["extra-traits", "full", "parsing", "proc-macro"], workspace = true }
diff --git a/substrate/client/transaction-pool/Cargo.toml b/substrate/client/transaction-pool/Cargo.toml
index c7a2540f8ed..2ca37afd61b 100644
--- a/substrate/client/transaction-pool/Cargo.toml
+++ b/substrate/client/transaction-pool/Cargo.toml
@@ -23,8 +23,8 @@ futures-timer = "3.0.2"
 linked-hash-map = "0.5.4"
 log = { workspace = true, default-features = true }
 parking_lot = "0.12.1"
-serde = { version = "1.0.196", features = ["derive"] }
-thiserror = "1.0.48"
+serde = { features = ["derive"], workspace = true, default-features = true }
+thiserror = { workspace = true }
 prometheus-endpoint = { package = "substrate-prometheus-endpoint", path = "../../utils/prometheus" }
 sc-client-api = { path = "../api" }
 sc-transaction-pool-api = { path = "api" }
diff --git a/substrate/client/transaction-pool/api/Cargo.toml b/substrate/client/transaction-pool/api/Cargo.toml
index 79449b2ee87..d52e4783fab 100644
--- a/substrate/client/transaction-pool/api/Cargo.toml
+++ b/substrate/client/transaction-pool/api/Cargo.toml
@@ -16,11 +16,11 @@ async-trait = "0.1.74"
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 futures = "0.3.21"
 log = { workspace = true, default-features = true }
-serde = { version = "1.0.196", features = ["derive"] }
-thiserror = "1.0.48"
+serde = { features = ["derive"], workspace = true, default-features = true }
+thiserror = { workspace = true }
 sp-blockchain = { path = "../../../primitives/blockchain" }
 sp-core = { path = "../../../primitives/core", default-features = false }
 sp-runtime = { path = "../../../primitives/runtime", default-features = false }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
diff --git a/substrate/frame/beefy-mmr/Cargo.toml b/substrate/frame/beefy-mmr/Cargo.toml
index 25290890fcd..17707731773 100644
--- a/substrate/frame/beefy-mmr/Cargo.toml
+++ b/substrate/frame/beefy-mmr/Cargo.toml
@@ -16,7 +16,7 @@ array-bytes = { version = "6.1", optional = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 binary-merkle-tree = { path = "../../utils/binary-merkle-tree", default-features = false }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/frame/beefy/Cargo.toml b/substrate/frame/beefy/Cargo.toml
index 866b032c331..e38eaa6fb07 100644
--- a/substrate/frame/beefy/Cargo.toml
+++ b/substrate/frame/beefy/Cargo.toml
@@ -15,7 +15,7 @@ workspace = true
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive", "serde"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
 pallet-authorship = { path = "../authorship", default-features = false }
diff --git a/substrate/frame/benchmarking/Cargo.toml b/substrate/frame/benchmarking/Cargo.toml
index 8be7a500d3f..bf42aae979c 100644
--- a/substrate/frame/benchmarking/Cargo.toml
+++ b/substrate/frame/benchmarking/Cargo.toml
@@ -21,7 +21,7 @@ linregress = { version = "0.5.1", optional = true }
 log = { workspace = true }
 paste = "1.0"
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 frame-support = { path = "../support", default-features = false }
 frame-support-procedural = { path = "../support/procedural", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/frame/contracts/Cargo.toml b/substrate/frame/contracts/Cargo.toml
index 0b127a5a454..be3bafcd23f 100644
--- a/substrate/frame/contracts/Cargo.toml
+++ b/substrate/frame/contracts/Cargo.toml
@@ -25,7 +25,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 ] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 log = { workspace = true }
-serde = { version = "1", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 smallvec = { version = "1", default-features = false, features = [
 	"const_generics",
 ] }
diff --git a/substrate/frame/contracts/proc-macro/Cargo.toml b/substrate/frame/contracts/proc-macro/Cargo.toml
index 7e4a6c58666..4080cd0442d 100644
--- a/substrate/frame/contracts/proc-macro/Cargo.toml
+++ b/substrate/frame/contracts/proc-macro/Cargo.toml
@@ -19,5 +19,5 @@ proc-macro = true
 
 [dependencies]
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
-syn = { version = "2.0.49", features = ["full"] }
+quote = { workspace = true }
+syn = { features = ["full"], workspace = true }
diff --git a/substrate/frame/conviction-voting/Cargo.toml b/substrate/frame/conviction-voting/Cargo.toml
index d4921bf7b4b..ff5af995026 100644
--- a/substrate/frame/conviction-voting/Cargo.toml
+++ b/substrate/frame/conviction-voting/Cargo.toml
@@ -22,7 +22,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 	"max-encoded-len",
 ] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true, default-features = true }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/frame/democracy/Cargo.toml b/substrate/frame/democracy/Cargo.toml
index e1e8964dd9c..9a55cda5340 100644
--- a/substrate/frame/democracy/Cargo.toml
+++ b/substrate/frame/democracy/Cargo.toml
@@ -20,7 +20,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 	"derive",
 ] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true, default-features = true }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/frame/election-provider-support/solution-type/Cargo.toml b/substrate/frame/election-provider-support/solution-type/Cargo.toml
index b5d6d1dca54..1bf1165229a 100644
--- a/substrate/frame/election-provider-support/solution-type/Cargo.toml
+++ b/substrate/frame/election-provider-support/solution-type/Cargo.toml
@@ -18,8 +18,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 proc-macro = true
 
 [dependencies]
-syn = { version = "2.0.49", features = ["full", "visit"] }
-quote = "1.0.28"
+syn = { features = ["full", "visit"], workspace = true }
+quote = { workspace = true }
 proc-macro2 = "1.0.56"
 proc-macro-crate = "3.0.0"
 
diff --git a/substrate/frame/message-queue/Cargo.toml b/substrate/frame/message-queue/Cargo.toml
index 104660a9886..8d9da7df39e 100644
--- a/substrate/frame/message-queue/Cargo.toml
+++ b/substrate/frame/message-queue/Cargo.toml
@@ -14,7 +14,7 @@ workspace = true
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true, features = ["derive"] }
+serde = { optional = true, features = ["derive"], workspace = true, default-features = true }
 log = { workspace = true }
 environmental = { version = "1.1.4", default-features = false }
 
diff --git a/substrate/frame/mixnet/Cargo.toml b/substrate/frame/mixnet/Cargo.toml
index e0334b6692d..d1bb01dde1a 100644
--- a/substrate/frame/mixnet/Cargo.toml
+++ b/substrate/frame/mixnet/Cargo.toml
@@ -22,7 +22,7 @@ frame-support = { default-features = false, path = "../support" }
 frame-system = { default-features = false, path = "../system" }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["derive"] }
+serde = { features = ["derive"], workspace = true }
 sp-application-crypto = { default-features = false, path = "../../primitives/application-crypto" }
 sp-arithmetic = { default-features = false, path = "../../primitives/arithmetic" }
 sp-io = { default-features = false, path = "../../primitives/io" }
diff --git a/substrate/frame/offences/Cargo.toml b/substrate/frame/offences/Cargo.toml
index e1bf71f70df..b3ef4671ce5 100644
--- a/substrate/frame/offences/Cargo.toml
+++ b/substrate/frame/offences/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
 pallet-balances = { path = "../balances", default-features = false }
diff --git a/substrate/frame/parameters/Cargo.toml b/substrate/frame/parameters/Cargo.toml
index 82059e3a73d..07ebeea52d5 100644
--- a/substrate/frame/parameters/Cargo.toml
+++ b/substrate/frame/parameters/Cargo.toml
@@ -11,7 +11,7 @@ edition.workspace = true
 codec = { package = "parity-scale-codec", version = "3.0.0", default-features = false, features = ["max-encoded-len"] }
 scale-info = { version = "2.1.2", default-features = false, features = ["derive"] }
 paste = { version = "1.0.14", default-features = false }
-serde = { version = "1.0.196", features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true, default-features = true }
 docify = "0.2.5"
 
 frame-support = { path = "../support", default-features = false, features = ["experimental"] }
diff --git a/substrate/frame/referenda/Cargo.toml b/substrate/frame/referenda/Cargo.toml
index 13c8cfc5961..2dfb25a2fd3 100644
--- a/substrate/frame/referenda/Cargo.toml
+++ b/substrate/frame/referenda/Cargo.toml
@@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 	"derive",
 ] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true, default-features = true }
 sp-arithmetic = { path = "../../primitives/arithmetic", default-features = false }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
 frame-support = { path = "../support", default-features = false }
diff --git a/substrate/frame/remark/Cargo.toml b/substrate/frame/remark/Cargo.toml
index c5f39a649ec..45710f0539e 100644
--- a/substrate/frame/remark/Cargo.toml
+++ b/substrate/frame/remark/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/frame/staking/Cargo.toml b/substrate/frame/staking/Cargo.toml
index 51aa8c79fad..d2a46146931 100644
--- a/substrate/frame/staking/Cargo.toml
+++ b/substrate/frame/staking/Cargo.toml
@@ -16,7 +16,7 @@ workspace = true
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = [
 	"derive",
 ] }
diff --git a/substrate/frame/staking/reward-curve/Cargo.toml b/substrate/frame/staking/reward-curve/Cargo.toml
index bae730f446f..e2a2782db2d 100644
--- a/substrate/frame/staking/reward-curve/Cargo.toml
+++ b/substrate/frame/staking/reward-curve/Cargo.toml
@@ -20,8 +20,8 @@ proc-macro = true
 [dependencies]
 proc-macro-crate = "3.0.0"
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
-syn = { version = "2.0.49", features = ["full", "visit"] }
+quote = { workspace = true }
+syn = { features = ["full", "visit"], workspace = true }
 
 [dev-dependencies]
 sp-runtime = { path = "../../../primitives/runtime" }
diff --git a/substrate/frame/state-trie-migration/Cargo.toml b/substrate/frame/state-trie-migration/Cargo.toml
index 5f86fb1595a..e837956613e 100644
--- a/substrate/frame/state-trie-migration/Cargo.toml
+++ b/substrate/frame/state-trie-migration/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 thousands = { version = "0.2.0", optional = true }
 zstd = { version = "0.12.4", default-features = false, optional = true }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
diff --git a/substrate/frame/support/Cargo.toml b/substrate/frame/support/Cargo.toml
index 73abc1a6aed..72e2d0bfa56 100644
--- a/substrate/frame/support/Cargo.toml
+++ b/substrate/frame/support/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 array-bytes = { version = "6.1", default-features = false }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 frame-metadata = { version = "16.0.0", default-features = false, features = ["current"] }
@@ -46,7 +46,7 @@ sp-crypto-hashing-proc-macro = { path = "../../primitives/crypto/hashing/proc-ma
 k256 = { version = "0.13.1", default-features = false, features = ["ecdsa"] }
 environmental = { version = "1.1.4", default-features = false }
 sp-genesis-builder = { path = "../../primitives/genesis-builder", default-features = false }
-serde_json = { version = "1.0.113", default-features = false, features = ["alloc"] }
+serde_json = { features = ["alloc"], workspace = true }
 docify = "0.2.7"
 static_assertions = "1.1.0"
 
diff --git a/substrate/frame/support/procedural/Cargo.toml b/substrate/frame/support/procedural/Cargo.toml
index f3434bd2491..85947503802 100644
--- a/substrate/frame/support/procedural/Cargo.toml
+++ b/substrate/frame/support/procedural/Cargo.toml
@@ -23,8 +23,8 @@ Inflector = "0.11.4"
 cfg-expr = "0.15.5"
 itertools = "0.10.3"
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
-syn = { version = "2.0.49", features = ["full", "visit-mut"] }
+quote = { workspace = true }
+syn = { features = ["full", "visit-mut"], workspace = true }
 frame-support-procedural-tools = { path = "tools" }
 macro_magic = { version = "0.5.0", features = ["proc_support"] }
 proc-macro-warning = { version = "1.0.0", default-features = false }
diff --git a/substrate/frame/support/procedural/tools/Cargo.toml b/substrate/frame/support/procedural/tools/Cargo.toml
index 9be5ca0bfd4..a75307aca79 100644
--- a/substrate/frame/support/procedural/tools/Cargo.toml
+++ b/substrate/frame/support/procedural/tools/Cargo.toml
@@ -17,6 +17,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 proc-macro-crate = "3.0.0"
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
-syn = { version = "2.0.49", features = ["extra-traits", "full", "visit"] }
+quote = { workspace = true }
+syn = { features = ["extra-traits", "full", "visit"], workspace = true }
 frame-support-procedural-tools-derive = { path = "derive" }
diff --git a/substrate/frame/support/procedural/tools/derive/Cargo.toml b/substrate/frame/support/procedural/tools/derive/Cargo.toml
index bb9935ba58c..b39d99a822f 100644
--- a/substrate/frame/support/procedural/tools/derive/Cargo.toml
+++ b/substrate/frame/support/procedural/tools/derive/Cargo.toml
@@ -19,5 +19,5 @@ proc-macro = true
 
 [dependencies]
 proc-macro2 = "1.0.56"
-quote = { version = "1.0.28", features = ["proc-macro"] }
-syn = { version = "2.0.49", features = ["extra-traits", "full", "parsing", "proc-macro"] }
+quote = { features = ["proc-macro"], workspace = true }
+syn = { features = ["extra-traits", "full", "parsing", "proc-macro"], workspace = true }
diff --git a/substrate/frame/support/test/Cargo.toml b/substrate/frame/support/test/Cargo.toml
index 1dbf46109c8..ae2c56a531f 100644
--- a/substrate/frame/support/test/Cargo.toml
+++ b/substrate/frame/support/test/Cargo.toml
@@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 static_assertions = "1.1.0"
-serde = { version = "1.0.196", default-features = false, features = ["derive"] }
+serde = { features = ["derive"], workspace = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 frame-metadata = { version = "16.0.0", default-features = false, features = ["current"] }
diff --git a/substrate/frame/support/test/pallet/Cargo.toml b/substrate/frame/support/test/pallet/Cargo.toml
index 94afab76d89..ca889faef87 100644
--- a/substrate/frame/support/test/pallet/Cargo.toml
+++ b/substrate/frame/support/test/pallet/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["derive"] }
+serde = { features = ["derive"], workspace = true }
 frame-support = { path = "../..", default-features = false }
 frame-system = { path = "../../../system", default-features = false }
 sp-runtime = { path = "../../../../primitives/runtime", default-features = false }
diff --git a/substrate/frame/system/Cargo.toml b/substrate/frame/system/Cargo.toml
index b852aa99b97..416969e9c47 100644
--- a/substrate/frame/system/Cargo.toml
+++ b/substrate/frame/system/Cargo.toml
@@ -20,7 +20,7 @@ cfg-if = "1.0"
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive", "serde"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"] }
+serde = { features = ["alloc", "derive"], workspace = true }
 frame-support = { path = "../support", default-features = false }
 sp-core = { path = "../../primitives/core", default-features = false, features = ["serde"] }
 sp-io = { path = "../../primitives/io", default-features = false }
diff --git a/substrate/frame/tips/Cargo.toml b/substrate/frame/tips/Cargo.toml
index ae308cf67f0..7339cf0a8cc 100644
--- a/substrate/frame/tips/Cargo.toml
+++ b/substrate/frame/tips/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true, default-features = true }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/frame/transaction-payment/Cargo.toml b/substrate/frame/transaction-payment/Cargo.toml
index 56c1cc4caa7..275e1c01f92 100644
--- a/substrate/frame/transaction-payment/Cargo.toml
+++ b/substrate/frame/transaction-payment/Cargo.toml
@@ -20,7 +20,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 	"derive",
 ] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
 sp-core = { path = "../../primitives/core", default-features = false }
@@ -29,7 +29,7 @@ sp-runtime = { path = "../../primitives/runtime", default-features = false }
 sp-std = { path = "../../primitives/std", default-features = false }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 pallet-balances = { path = "../balances" }
 
 [features]
diff --git a/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml b/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml
index 9a80081e04f..1da3237df08 100644
--- a/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml
+++ b/substrate/frame/transaction-payment/asset-tx-payment/Cargo.toml
@@ -30,10 +30,10 @@ frame-benchmarking = { path = "../../benchmarking", default-features = false, op
 # Other dependencies
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 
 sp-storage = { path = "../../../primitives/storage", default-features = false }
 
diff --git a/substrate/frame/transaction-storage/Cargo.toml b/substrate/frame/transaction-storage/Cargo.toml
index 59b6e578571..1386d9b5a56 100644
--- a/substrate/frame/transaction-storage/Cargo.toml
+++ b/substrate/frame/transaction-storage/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 array-bytes = { version = "6.1", optional = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", optional = true }
+serde = { optional = true, workspace = true, default-features = true }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/frame/treasury/Cargo.toml b/substrate/frame/treasury/Cargo.toml
index edc68b386bc..5f90904123d 100644
--- a/substrate/frame/treasury/Cargo.toml
+++ b/substrate/frame/treasury/Cargo.toml
@@ -23,7 +23,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 docify = "0.2.7"
 impl-trait-for-tuples = "0.2.2"
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true, default-features = true }
 frame-benchmarking = { path = "../benchmarking", default-features = false, optional = true }
 frame-support = { path = "../support", default-features = false }
 frame-system = { path = "../system", default-features = false }
diff --git a/substrate/primitives/api/Cargo.toml b/substrate/primitives/api/Cargo.toml
index 3330d2a88de..f4b1d13c520 100644
--- a/substrate/primitives/api/Cargo.toml
+++ b/substrate/primitives/api/Cargo.toml
@@ -27,7 +27,7 @@ sp-version = { path = "../version", default-features = false }
 sp-state-machine = { path = "../state-machine", default-features = false, optional = true }
 sp-trie = { path = "../trie", default-features = false, optional = true }
 hash-db = { version = "0.16.0", optional = true }
-thiserror = { version = "1.0.48", optional = true }
+thiserror = { optional = true, workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = [
 	"derive",
 ] }
diff --git a/substrate/primitives/api/proc-macro/Cargo.toml b/substrate/primitives/api/proc-macro/Cargo.toml
index f0644eea8f4..f5406758687 100644
--- a/substrate/primitives/api/proc-macro/Cargo.toml
+++ b/substrate/primitives/api/proc-macro/Cargo.toml
@@ -19,8 +19,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 proc-macro = true
 
 [dependencies]
-quote = "1.0.28"
-syn = { version = "2.0.49", features = ["extra-traits", "fold", "full", "visit"] }
+quote = { workspace = true }
+syn = { features = ["extra-traits", "fold", "full", "visit"], workspace = true }
 proc-macro2 = "1.0.56"
 blake2 = { version = "0.10.4", default-features = false }
 proc-macro-crate = "3.0.0"
diff --git a/substrate/primitives/application-crypto/Cargo.toml b/substrate/primitives/application-crypto/Cargo.toml
index cf57aa4b76d..6f90a2b6262 100644
--- a/substrate/primitives/application-crypto/Cargo.toml
+++ b/substrate/primitives/application-crypto/Cargo.toml
@@ -21,7 +21,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 sp-core = { path = "../core", default-features = false }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, optional = true, features = ["alloc", "derive"] }
+serde = { optional = true, features = ["alloc", "derive"], workspace = true }
 sp-std = { path = "../std", default-features = false }
 sp-io = { path = "../io", default-features = false }
 
diff --git a/substrate/primitives/arithmetic/Cargo.toml b/substrate/primitives/arithmetic/Cargo.toml
index 92f9d23620e..301821ad689 100644
--- a/substrate/primitives/arithmetic/Cargo.toml
+++ b/substrate/primitives/arithmetic/Cargo.toml
@@ -24,7 +24,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 integer-sqrt = "0.1.2"
 num-traits = { version = "0.2.17", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"], optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 static_assertions = "1.1.0"
 sp-std = { path = "../std", default-features = false }
 
diff --git a/substrate/primitives/blockchain/Cargo.toml b/substrate/primitives/blockchain/Cargo.toml
index 26ba41645e5..9d13d627eeb 100644
--- a/substrate/primitives/blockchain/Cargo.toml
+++ b/substrate/primitives/blockchain/Cargo.toml
@@ -22,7 +22,7 @@ futures = "0.3.21"
 log = { workspace = true, default-features = true }
 parking_lot = "0.12.1"
 schnellru = "0.2.1"
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 sp-api = { path = "../api" }
 sp-consensus = { path = "../consensus/common" }
 sp-database = { path = "../database" }
diff --git a/substrate/primitives/consensus/babe/Cargo.toml b/substrate/primitives/consensus/babe/Cargo.toml
index f6bc94e3adf..8b3006f79a7 100644
--- a/substrate/primitives/consensus/babe/Cargo.toml
+++ b/substrate/primitives/consensus/babe/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 async-trait = { version = "0.1.74", optional = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"], optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 sp-api = { path = "../../api", default-features = false }
 sp-application-crypto = { path = "../../application-crypto", default-features = false }
 sp-consensus-slots = { path = "../slots", default-features = false }
diff --git a/substrate/primitives/consensus/beefy/Cargo.toml b/substrate/primitives/consensus/beefy/Cargo.toml
index 38fc67b7f52..8ab817d52ef 100644
--- a/substrate/primitives/consensus/beefy/Cargo.toml
+++ b/substrate/primitives/consensus/beefy/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, optional = true, features = ["alloc", "derive"] }
+serde = { optional = true, features = ["alloc", "derive"], workspace = true }
 sp-api = { path = "../../api", default-features = false }
 sp-application-crypto = { path = "../../application-crypto", default-features = false }
 sp-core = { path = "../../core", default-features = false }
diff --git a/substrate/primitives/consensus/common/Cargo.toml b/substrate/primitives/consensus/common/Cargo.toml
index cbca0d94d3e..048e31b0265 100644
--- a/substrate/primitives/consensus/common/Cargo.toml
+++ b/substrate/primitives/consensus/common/Cargo.toml
@@ -20,7 +20,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 async-trait = "0.1.74"
 futures = { version = "0.3.21", features = ["thread-pool"] }
 log = { workspace = true, default-features = true }
-thiserror = "1.0.48"
+thiserror = { workspace = true }
 sp-core = { path = "../../core" }
 sp-inherents = { path = "../../inherents" }
 sp-runtime = { path = "../../runtime" }
diff --git a/substrate/primitives/consensus/grandpa/Cargo.toml b/substrate/primitives/consensus/grandpa/Cargo.toml
index b556b43bc95..b06208a4308 100644
--- a/substrate/primitives/consensus/grandpa/Cargo.toml
+++ b/substrate/primitives/consensus/grandpa/Cargo.toml
@@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 grandpa = { package = "finality-grandpa", version = "0.16.2", default-features = false, features = ["derive-codec"] }
 log = { workspace = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", features = ["alloc", "derive"], default-features = false, optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 sp-api = { path = "../../api", default-features = false }
 sp-application-crypto = { path = "../../application-crypto", default-features = false }
 sp-core = { path = "../../core", default-features = false }
diff --git a/substrate/primitives/consensus/sassafras/Cargo.toml b/substrate/primitives/consensus/sassafras/Cargo.toml
index 4c908201127..b707ad18b5b 100644
--- a/substrate/primitives/consensus/sassafras/Cargo.toml
+++ b/substrate/primitives/consensus/sassafras/Cargo.toml
@@ -20,7 +20,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 scale-codec = { package = "parity-scale-codec", version = "3.2.2", default-features = false }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true }
 sp-api = { path = "../../api", default-features = false }
 sp-application-crypto = { path = "../../application-crypto", default-features = false, features = ["bandersnatch-experimental"] }
 sp-consensus-slots = { path = "../slots", default-features = false }
diff --git a/substrate/primitives/consensus/slots/Cargo.toml b/substrate/primitives/consensus/slots/Cargo.toml
index fadcd1215ee..8372b2b04a6 100644
--- a/substrate/primitives/consensus/slots/Cargo.toml
+++ b/substrate/primitives/consensus/slots/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0", default-features = false, features = ["alloc", "derive"], optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 sp-std = { path = "../../std", default-features = false }
 sp-timestamp = { path = "../../timestamp", default-features = false }
 
diff --git a/substrate/primitives/core/Cargo.toml b/substrate/primitives/core/Cargo.toml
index c06dd9197ed..8fcabfeb238 100644
--- a/substrate/primitives/core/Cargo.toml
+++ b/substrate/primitives/core/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive", "max-encoded-len"] }
 scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
 log = { workspace = true }
-serde = { version = "1.0.196", optional = true, default-features = false, features = ["alloc", "derive"] }
+serde = { optional = true, features = ["alloc", "derive"], workspace = true }
 bounded-collections = { version = "0.2.0", default-features = false }
 primitive-types = { version = "0.12.0", default-features = false, features = ["codec", "scale-info"] }
 impl-serde = { version = "0.4.0", default-features = false, optional = true }
@@ -39,7 +39,7 @@ sp-storage = { path = "../storage", default-features = false }
 sp-externalities = { path = "../externalities", optional = true }
 futures = { version = "0.3.21", optional = true }
 dyn-clonable = { version = "0.9.0", optional = true }
-thiserror = { version = "1.0.48", optional = true }
+thiserror = { optional = true, workspace = true }
 tracing = { version = "0.1.29", optional = true }
 bitflags = "1.3"
 paste = "1.0.7"
@@ -63,7 +63,7 @@ bandersnatch_vrfs = { git = "https://github.com/w3f/ring-vrf", rev = "e9782f9",
 
 [dev-dependencies]
 criterion = "0.4.0"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 lazy_static = "1.4.0"
 regex = "1.6.0"
 
diff --git a/substrate/primitives/crypto/hashing/proc-macro/Cargo.toml b/substrate/primitives/crypto/hashing/proc-macro/Cargo.toml
index 2856c93c7ee..f244b02ca10 100644
--- a/substrate/primitives/crypto/hashing/proc-macro/Cargo.toml
+++ b/substrate/primitives/crypto/hashing/proc-macro/Cargo.toml
@@ -19,6 +19,6 @@ targets = ["x86_64-unknown-linux-gnu"]
 proc-macro = true
 
 [dependencies]
-quote = "1.0.28"
-syn = { version = "2.0.49", features = ["full", "parsing"] }
+quote = { workspace = true }
+syn = { features = ["full", "parsing"], workspace = true }
 sp-crypto-hashing = { path = "..", default-features = false }
diff --git a/substrate/primitives/debug-derive/Cargo.toml b/substrate/primitives/debug-derive/Cargo.toml
index aaf5e618189..debf964aa3d 100644
--- a/substrate/primitives/debug-derive/Cargo.toml
+++ b/substrate/primitives/debug-derive/Cargo.toml
@@ -19,8 +19,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 proc-macro = true
 
 [dependencies]
-quote = "1.0.28"
-syn = "2.0.49"
+quote = { workspace = true }
+syn = { workspace = true }
 proc-macro2 = "1.0.56"
 
 [features]
diff --git a/substrate/primitives/genesis-builder/Cargo.toml b/substrate/primitives/genesis-builder/Cargo.toml
index 6497465a881..bf12433c5f4 100644
--- a/substrate/primitives/genesis-builder/Cargo.toml
+++ b/substrate/primitives/genesis-builder/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 sp-api = { path = "../api", default-features = false }
 sp-runtime = { path = "../runtime", default-features = false }
 sp-std = { path = "../std", default-features = false }
-serde_json = { version = "1.0.113", default-features = false, features = ["alloc", "arbitrary_precision"] }
+serde_json = { features = ["alloc", "arbitrary_precision"], workspace = true }
 
 [features]
 default = ["std"]
diff --git a/substrate/primitives/inherents/Cargo.toml b/substrate/primitives/inherents/Cargo.toml
index 2a9d205e166..bfb1d773347 100644
--- a/substrate/primitives/inherents/Cargo.toml
+++ b/substrate/primitives/inherents/Cargo.toml
@@ -21,7 +21,7 @@ async-trait = { version = "0.1.74", optional = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 impl-trait-for-tuples = "0.2.2"
-thiserror = { version = "1.0.48", optional = true }
+thiserror = { optional = true, workspace = true }
 sp-runtime = { path = "../runtime", default-features = false, optional = true }
 sp-std = { path = "../std", default-features = false }
 
diff --git a/substrate/primitives/maybe-compressed-blob/Cargo.toml b/substrate/primitives/maybe-compressed-blob/Cargo.toml
index 84a5592dcaf..fa5383d03b1 100644
--- a/substrate/primitives/maybe-compressed-blob/Cargo.toml
+++ b/substrate/primitives/maybe-compressed-blob/Cargo.toml
@@ -14,5 +14,5 @@ readme = "README.md"
 workspace = true
 
 [dependencies]
-thiserror = "1.0"
+thiserror = { workspace = true }
 zstd = { version = "0.12.4", default-features = false }
diff --git a/substrate/primitives/merkle-mountain-range/Cargo.toml b/substrate/primitives/merkle-mountain-range/Cargo.toml
index f859bb5514e..50d84778239 100644
--- a/substrate/primitives/merkle-mountain-range/Cargo.toml
+++ b/substrate/primitives/merkle-mountain-range/Cargo.toml
@@ -19,13 +19,13 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 log = { workspace = true }
 mmr-lib = { package = "ckb-merkle-mountain-range", version = "0.5.2", default-features = false }
-serde = { version = "1.0.196", features = ["alloc", "derive"], default-features = false, optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 sp-api = { path = "../api", default-features = false }
 sp-core = { path = "../core", default-features = false }
 sp-debug-derive = { path = "../debug-derive", default-features = false }
 sp-runtime = { path = "../runtime", default-features = false }
 sp-std = { path = "../std", default-features = false }
-thiserror = { version = "1.0", optional = true }
+thiserror = { optional = true, workspace = true }
 
 [dev-dependencies]
 array-bytes = "6.1"
diff --git a/substrate/primitives/npos-elections/Cargo.toml b/substrate/primitives/npos-elections/Cargo.toml
index 8c3aee1d086..7373aa849cb 100644
--- a/substrate/primitives/npos-elections/Cargo.toml
+++ b/substrate/primitives/npos-elections/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"], optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 sp-arithmetic = { path = "../arithmetic", default-features = false }
 sp-core = { path = "../core", default-features = false }
 sp-runtime = { path = "../runtime", default-features = false }
diff --git a/substrate/primitives/rpc/Cargo.toml b/substrate/primitives/rpc/Cargo.toml
index 04bbe3eea53..dce0eeee9f9 100644
--- a/substrate/primitives/rpc/Cargo.toml
+++ b/substrate/primitives/rpc/Cargo.toml
@@ -17,8 +17,8 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 rustc-hash = "1.1.0"
-serde = { version = "1.0.196", features = ["derive"] }
+serde = { features = ["derive"], workspace = true, default-features = true }
 sp-core = { path = "../core" }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
diff --git a/substrate/primitives/runtime-interface/proc-macro/Cargo.toml b/substrate/primitives/runtime-interface/proc-macro/Cargo.toml
index 8031ba75b9b..7dbd810fea9 100644
--- a/substrate/primitives/runtime-interface/proc-macro/Cargo.toml
+++ b/substrate/primitives/runtime-interface/proc-macro/Cargo.toml
@@ -22,6 +22,6 @@ proc-macro = true
 Inflector = "0.11.4"
 proc-macro-crate = "3.0.0"
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
+quote = { workspace = true }
 expander = "2.0.0"
-syn = { version = "2.0.49", features = ["extra-traits", "fold", "full", "visit"] }
+syn = { features = ["extra-traits", "fold", "full", "visit"], workspace = true }
diff --git a/substrate/primitives/runtime/Cargo.toml b/substrate/primitives/runtime/Cargo.toml
index 8e3b63a55de..cacfc059722 100644
--- a/substrate/primitives/runtime/Cargo.toml
+++ b/substrate/primitives/runtime/Cargo.toml
@@ -25,7 +25,7 @@ log = { workspace = true }
 paste = "1.0"
 rand = { version = "0.8.5", optional = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"], optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 sp-application-crypto = { path = "../application-crypto", default-features = false }
 sp-arithmetic = { path = "../arithmetic", default-features = false }
 sp-core = { path = "../core", default-features = false }
@@ -38,7 +38,7 @@ simple-mermaid = { version = "0.1.1", optional = true }
 
 [dev-dependencies]
 rand = "0.8.5"
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
 zstd = { version = "0.12.4", default-features = false }
 sp-api = { path = "../api" }
 sp-state-machine = { path = "../state-machine" }
diff --git a/substrate/primitives/staking/Cargo.toml b/substrate/primitives/staking/Cargo.toml
index 9429432babb..21346fbaca5 100644
--- a/substrate/primitives/staking/Cargo.toml
+++ b/substrate/primitives/staking/Cargo.toml
@@ -16,7 +16,7 @@ workspace = true
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"], optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 impl-trait-for-tuples = "0.2.2"
diff --git a/substrate/primitives/state-machine/Cargo.toml b/substrate/primitives/state-machine/Cargo.toml
index 489209ecc33..09994f1ae91 100644
--- a/substrate/primitives/state-machine/Cargo.toml
+++ b/substrate/primitives/state-machine/Cargo.toml
@@ -23,7 +23,7 @@ log = { workspace = true }
 parking_lot = { version = "0.12.1", optional = true }
 rand = { version = "0.8.5", optional = true }
 smallvec = "1.11.0"
-thiserror = { version = "1.0.48", optional = true }
+thiserror = { optional = true, workspace = true }
 tracing = { version = "0.1.29", optional = true }
 sp-core = { path = "../core", default-features = false }
 sp-externalities = { path = "../externalities", default-features = false }
diff --git a/substrate/primitives/statement-store/Cargo.toml b/substrate/primitives/statement-store/Cargo.toml
index 14af57a7b41..652ab3ef13a 100644
--- a/substrate/primitives/statement-store/Cargo.toml
+++ b/substrate/primitives/statement-store/Cargo.toml
@@ -26,7 +26,7 @@ sp-api = { path = "../api", default-features = false }
 sp-application-crypto = { path = "../application-crypto", default-features = false }
 sp-runtime-interface = { path = "../runtime-interface", default-features = false }
 sp-externalities = { path = "../externalities", default-features = false }
-thiserror = { version = "1.0", optional = true }
+thiserror = { optional = true, workspace = true }
 
 # ECIES dependencies
 ed25519-dalek = { version = "2.1", optional = true }
diff --git a/substrate/primitives/storage/Cargo.toml b/substrate/primitives/storage/Cargo.toml
index e15a3296d52..d3ade87ea47 100644
--- a/substrate/primitives/storage/Cargo.toml
+++ b/substrate/primitives/storage/Cargo.toml
@@ -20,7 +20,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 impl-serde = { version = "0.4.0", optional = true, default-features = false }
 ref-cast = "1.0.0"
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"], optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
 sp-debug-derive = { path = "../debug-derive", default-features = false }
 sp-std = { path = "../std", default-features = false }
 
diff --git a/substrate/primitives/test-primitives/Cargo.toml b/substrate/primitives/test-primitives/Cargo.toml
index 0411326c28b..f310216dd58 100644
--- a/substrate/primitives/test-primitives/Cargo.toml
+++ b/substrate/primitives/test-primitives/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["derive"], optional = true }
+serde = { features = ["derive"], optional = true, workspace = true }
 sp-application-crypto = { path = "../application-crypto", default-features = false }
 sp-core = { path = "../core", default-features = false }
 sp-runtime = { path = "../runtime", default-features = false }
diff --git a/substrate/primitives/timestamp/Cargo.toml b/substrate/primitives/timestamp/Cargo.toml
index 914c1e7865e..9e2b802bfb1 100644
--- a/substrate/primitives/timestamp/Cargo.toml
+++ b/substrate/primitives/timestamp/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 async-trait = { version = "0.1.74", optional = true }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0.48", optional = true }
+thiserror = { optional = true, workspace = true }
 sp-inherents = { path = "../inherents", default-features = false }
 sp-runtime = { path = "../runtime", default-features = false }
 sp-std = { path = "../std", default-features = false }
diff --git a/substrate/primitives/trie/Cargo.toml b/substrate/primitives/trie/Cargo.toml
index f871f462d36..16d3ca19a17 100644
--- a/substrate/primitives/trie/Cargo.toml
+++ b/substrate/primitives/trie/Cargo.toml
@@ -30,7 +30,7 @@ nohash-hasher = { version = "0.2.0", optional = true }
 parking_lot = { version = "0.12.1", optional = true }
 rand = { version = "0.8", optional = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-thiserror = { version = "1.0.48", optional = true }
+thiserror = { optional = true, workspace = true }
 tracing = { version = "0.1.29", optional = true }
 trie-db = { version = "0.28.0", default-features = false }
 trie-root = { version = "0.18.0", default-features = false }
diff --git a/substrate/primitives/version/Cargo.toml b/substrate/primitives/version/Cargo.toml
index 21f95776375..a94e2322430 100644
--- a/substrate/primitives/version/Cargo.toml
+++ b/substrate/primitives/version/Cargo.toml
@@ -21,8 +21,8 @@ codec = { package = "parity-scale-codec", version = "3.6.1", default-features =
 impl-serde = { version = "0.4.0", default-features = false, optional = true }
 parity-wasm = { version = "0.45", optional = true }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, features = ["alloc", "derive"], optional = true }
-thiserror = { version = "1.0.48", optional = true }
+serde = { features = ["alloc", "derive"], optional = true, workspace = true }
+thiserror = { optional = true, workspace = true }
 sp-crypto-hashing-proc-macro = { path = "../crypto/hashing/proc-macro" }
 sp-runtime = { path = "../runtime", default-features = false }
 sp-std = { path = "../std", default-features = false }
diff --git a/substrate/primitives/version/proc-macro/Cargo.toml b/substrate/primitives/version/proc-macro/Cargo.toml
index b99894f8ab5..f7abf88c9a6 100644
--- a/substrate/primitives/version/proc-macro/Cargo.toml
+++ b/substrate/primitives/version/proc-macro/Cargo.toml
@@ -21,8 +21,8 @@ proc-macro = true
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", features = ["derive"] }
 proc-macro2 = "1.0.56"
-quote = "1.0.28"
-syn = { version = "2.0.49", features = ["extra-traits", "fold", "full", "visit"] }
+quote = { workspace = true }
+syn = { features = ["extra-traits", "fold", "full", "visit"], workspace = true }
 
 [dev-dependencies]
 sp-version = { path = ".." }
diff --git a/substrate/primitives/weights/Cargo.toml b/substrate/primitives/weights/Cargo.toml
index 87e0c6a7299..a7d61de001b 100644
--- a/substrate/primitives/weights/Cargo.toml
+++ b/substrate/primitives/weights/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 bounded-collections = { version = "0.2.0", default-features = false }
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false, features = ["derive"] }
 scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.196", default-features = false, optional = true, features = ["alloc", "derive"] }
+serde = { optional = true, features = ["alloc", "derive"], workspace = true }
 smallvec = "1.11.0"
 sp-arithmetic = { path = "../arithmetic", default-features = false }
 sp-debug-derive = { path = "../debug-derive", default-features = false }
diff --git a/substrate/test-utils/client/Cargo.toml b/substrate/test-utils/client/Cargo.toml
index 4ec2857b109..349b04d32d7 100644
--- a/substrate/test-utils/client/Cargo.toml
+++ b/substrate/test-utils/client/Cargo.toml
@@ -20,8 +20,8 @@ array-bytes = "6.1"
 async-trait = "0.1.74"
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 futures = "0.3.21"
-serde = "1.0.196"
-serde_json = "1.0.113"
+serde = { workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 sc-client-api = { path = "../../client/api" }
 sc-client-db = { path = "../../client/db", default-features = false, features = [
 	"test-helpers",
diff --git a/substrate/test-utils/runtime/Cargo.toml b/substrate/test-utils/runtime/Cargo.toml
index 49b84e04dab..3bba5cd5bf0 100644
--- a/substrate/test-utils/runtime/Cargo.toml
+++ b/substrate/test-utils/runtime/Cargo.toml
@@ -62,8 +62,8 @@ sc-executor-common = { path = "../../client/executor/common" }
 sp-consensus = { path = "../../primitives/consensus/common" }
 substrate-test-runtime-client = { path = "client" }
 sp-tracing = { path = "../../primitives/tracing" }
-serde = { version = "1.0.196", features = ["alloc", "derive"], default-features = false }
-serde_json = { version = "1.0.113", default-features = false, features = ["alloc"] }
+serde = { features = ["alloc", "derive"], workspace = true }
+serde_json = { features = ["alloc"], workspace = true }
 
 [build-dependencies]
 substrate-wasm-builder = { path = "../../utils/wasm-builder", optional = true }
diff --git a/substrate/test-utils/runtime/transaction-pool/Cargo.toml b/substrate/test-utils/runtime/transaction-pool/Cargo.toml
index b52a897438b..33e56e8e55e 100644
--- a/substrate/test-utils/runtime/transaction-pool/Cargo.toml
+++ b/substrate/test-utils/runtime/transaction-pool/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 futures = "0.3.21"
 parking_lot = "0.12.1"
-thiserror = "1.0"
+thiserror = { workspace = true }
 sc-transaction-pool = { path = "../../../client/transaction-pool" }
 sc-transaction-pool-api = { path = "../../../client/transaction-pool/api" }
 sp-blockchain = { path = "../../../primitives/blockchain" }
diff --git a/substrate/utils/frame/benchmarking-cli/Cargo.toml b/substrate/utils/frame/benchmarking-cli/Cargo.toml
index 4f6cbc1d5d6..a2db83052c5 100644
--- a/substrate/utils/frame/benchmarking-cli/Cargo.toml
+++ b/substrate/utils/frame/benchmarking-cli/Cargo.toml
@@ -29,9 +29,9 @@ linked-hash-map = "0.5.4"
 log = { workspace = true, default-features = true }
 rand = { version = "0.8.5", features = ["small_rng"] }
 rand_pcg = "0.3.1"
-serde = "1.0.196"
-serde_json = "1.0.113"
-thiserror = "1.0.48"
+serde = { workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
+thiserror = { workspace = true }
 thousands = "0.2.0"
 frame-benchmarking = { path = "../../../frame/benchmarking" }
 frame-support = { path = "../../../frame/support" }
diff --git a/substrate/utils/frame/remote-externalities/Cargo.toml b/substrate/utils/frame/remote-externalities/Cargo.toml
index c96d37d4ae6..61e0a861ee0 100644
--- a/substrate/utils/frame/remote-externalities/Cargo.toml
+++ b/substrate/utils/frame/remote-externalities/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 jsonrpsee = { version = "0.22", features = ["http-client"] }
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 log = { workspace = true, default-features = true }
-serde = "1.0.196"
+serde = { workspace = true, default-features = true }
 sp-core = { path = "../../../primitives/core" }
 sp-crypto-hashing = { path = "../../../primitives/crypto/hashing" }
 sp-state-machine = { path = "../../../primitives/state-machine" }
diff --git a/substrate/utils/frame/rpc/client/Cargo.toml b/substrate/utils/frame/rpc/client/Cargo.toml
index 0057bf6eb50..b51e3f44f4e 100644
--- a/substrate/utils/frame/rpc/client/Cargo.toml
+++ b/substrate/utils/frame/rpc/client/Cargo.toml
@@ -18,7 +18,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 jsonrpsee = { version = "0.22", features = ["ws-client"] }
 sc-rpc-api = { path = "../../../../client/rpc-api" }
 async-trait = "0.1.74"
-serde = "1"
+serde = { workspace = true, default-features = true }
 sp-runtime = { path = "../../../../primitives/runtime" }
 log = { workspace = true, default-features = true }
 
diff --git a/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml b/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml
index 58c2f3d99ac..f9a45e21ce1 100644
--- a/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml
+++ b/substrate/utils/frame/rpc/state-trie-migration-rpc/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1", default-features = false }
-serde = { version = "1", features = ["derive"] }
+serde = { features = ["derive"], workspace = true, default-features = true }
 
 sp-core = { path = "../../../../primitives/core" }
 sp-state-machine = { path = "../../../../primitives/state-machine" }
@@ -32,4 +32,4 @@ sc-rpc-api = { path = "../../../../client/rpc-api" }
 sp-runtime = { path = "../../../../primitives/runtime" }
 
 [dev-dependencies]
-serde_json = "1.0.113"
+serde_json = { workspace = true, default-features = true }
diff --git a/substrate/utils/frame/rpc/support/Cargo.toml b/substrate/utils/frame/rpc/support/Cargo.toml
index a4b0a7777fb..2e4bb6a1057 100644
--- a/substrate/utils/frame/rpc/support/Cargo.toml
+++ b/substrate/utils/frame/rpc/support/Cargo.toml
@@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.6.1" }
 jsonrpsee = { version = "0.22", features = ["jsonrpsee-types"] }
-serde = "1"
+serde = { workspace = true, default-features = true }
 frame-support = { path = "../../../../frame/support" }
 sc-rpc-api = { path = "../../../../client/rpc-api" }
 sp-storage = { path = "../../../../primitives/storage" }
diff --git a/substrate/utils/frame/try-runtime/cli/Cargo.toml b/substrate/utils/frame/try-runtime/cli/Cargo.toml
index 63165f07e5c..d123fc5f62d 100644
--- a/substrate/utils/frame/try-runtime/cli/Cargo.toml
+++ b/substrate/utils/frame/try-runtime/cli/Cargo.toml
@@ -42,8 +42,8 @@ clap = { version = "4.5.1", features = ["derive"] }
 hex = { version = "0.4.3", default-features = false }
 log = { workspace = true, default-features = true }
 parity-scale-codec = "3.6.1"
-serde = "1.0.196"
-serde_json = "1.0.113"
+serde = { workspace = true, default-features = true }
+serde_json = { workspace = true, default-features = true }
 zstd = { version = "0.12.4", default-features = false }
 
 [dev-dependencies]
diff --git a/substrate/utils/prometheus/Cargo.toml b/substrate/utils/prometheus/Cargo.toml
index 2a09cb2bb51..36527ac6183 100644
--- a/substrate/utils/prometheus/Cargo.toml
+++ b/substrate/utils/prometheus/Cargo.toml
@@ -19,7 +19,7 @@ targets = ["x86_64-unknown-linux-gnu"]
 hyper = { version = "0.14.16", default-features = false, features = ["http1", "server", "tcp"] }
 log = { workspace = true, default-features = true }
 prometheus = { version = "0.13.0", default-features = false }
-thiserror = "1.0"
+thiserror = { workspace = true }
 tokio = { version = "1.22.0", features = ["parking_lot"] }
 
 [dev-dependencies]
-- 
GitLab