From 142a11ad9532754231a2b44fdbd080f656eb509d Mon Sep 17 00:00:00 2001
From: Serban Iorga <serban@parity.io>
Date: Mon, 11 Sep 2023 11:47:45 +0300
Subject: [PATCH] Update bridges subtree (#1392)

* Move the bridges subtree under root

* Squashed 'bridges/' changes from 277f0d5496..e50398d1c5

e50398d1c5 bridges subtree fixes (#2528)
99af07522d Markdown linter (#1309) (#2526)
733ff0fe7a `polkadot-staging` branch: Use polkadot-sdk dependencies (#2524)
e8a59f141e Fix benchmark with new XCM::V3 `MAX_INSTRUCTIONS_TO_DECODE` (#2514)
62b185de15 Backport `polkadot-sdk` changes to `polkadot-staging` (#2518)
d9658f4d5b Fix equivocation detection containers startup (#2516) (#2517)
d65db28a8f Backport: building images from locally built binaries (#2513)
5fdbaf45f6 Start the equivocation detection loop from the complex relayer (#2507) (#2512)
7fbb67de46 Backport: Implement basic equivocations detection loop (#2375)
cb7efe245c Manually update deps in polkadot staging (#2371)
d17981fc33 #2351 to polkadot-staging (#2359)

git-subtree-dir: bridges
git-subtree-split: e50398d1c594e4e96df70b0bd376e565d17e8558

* Reapply diener workspacify

* Fix Cargo.toml

* Fix test

* Adjustments
---
 .github/pr-custom-review.yml                  |   2 +-
 cumulus/BRIDGES.md => BRIDGES.md              |   0
 Cargo.toml                                    |  50 ++++-----
 {cumulus/bridges => bridges}/.gitignore       |   0
 .../bridges => bridges}/CODE_OF_CONDUCT.md    |   0
 {cumulus/bridges => bridges}/LICENSE          |   0
 {cumulus/bridges => bridges}/README.md        |   0
 {cumulus/bridges => bridges}/SECURITY.md      |   0
 .../bin/runtime-common/Cargo.toml             |  26 ++---
 .../bin/runtime-common/src/integrity.rs       |  13 ---
 .../bin/runtime-common/src/lib.rs             |   0
 .../bin/runtime-common/src/messages.rs        |   0
 .../bin/runtime-common/src/messages_api.rs    |   0
 .../src/messages_benchmarking.rs              |   0
 .../runtime-common/src/messages_call_ext.rs   |   0
 .../runtime-common/src/messages_generation.rs |   0
 .../src/messages_xcm_extension.rs             |   0
 .../bin/runtime-common/src/mock.rs            |   0
 .../src/parachains_benchmarking.rs            |   0
 .../runtime-common/src/priority_calculator.rs |   0
 .../src/refund_relayer_extension.rs           |   0
 .../docs/complex-relay.html                   |   0
 .../docs/grandpa-finality-relay.html          |   0
 .../docs/high-level-overview.md               |   0
 .../docs/messages-relay.html                  |   0
 .../docs/parachains-finality-relay.html       |   0
 .../docs/polkadot-kusama-bridge-overview.md   |   0
 .../docs/polkadot-kusama-bridge.html          |   0
 .../modules/grandpa/Cargo.toml                |  18 +--
 .../modules/grandpa/README.md                 |   0
 .../modules/grandpa/src/benchmarking.rs       |   0
 .../modules/grandpa/src/call_ext.rs           |   0
 .../modules/grandpa/src/lib.rs                |   0
 .../modules/grandpa/src/mock.rs               |   0
 .../modules/grandpa/src/storage_types.rs      |   0
 .../modules/grandpa/src/weights.rs            |   0
 .../modules/messages/Cargo.toml               |  16 +--
 .../modules/messages/README.md                |   0
 .../modules/messages/src/benchmarking.rs      |   0
 .../modules/messages/src/inbound_lane.rs      |   0
 .../modules/messages/src/lib.rs               |   0
 .../modules/messages/src/mock.rs              |   0
 .../modules/messages/src/outbound_lane.rs     |   0
 .../modules/messages/src/weights.rs           |   0
 .../modules/messages/src/weights_ext.rs       |   0
 .../modules/parachains/Cargo.toml             |  16 +--
 .../modules/parachains/README.md              |   0
 .../modules/parachains/src/benchmarking.rs    |   0
 .../modules/parachains/src/call_ext.rs        |   0
 .../modules/parachains/src/lib.rs             |   0
 .../modules/parachains/src/mock.rs            |   0
 .../modules/parachains/src/weights.rs         |   0
 .../modules/parachains/src/weights_ext.rs     |   0
 .../modules/relayers/Cargo.toml               |  20 ++--
 .../modules/relayers/README.md                |   0
 .../modules/relayers/src/benchmarking.rs      |   0
 .../modules/relayers/src/lib.rs               |   0
 .../modules/relayers/src/mock.rs              |   0
 .../modules/relayers/src/payment_adapter.rs   |   0
 .../modules/relayers/src/stake_adapter.rs     |   0
 .../modules/relayers/src/weights.rs           |   0
 .../modules/relayers/src/weights_ext.rs       |   0
 .../modules/xcm-bridge-hub-router/Cargo.toml  |  22 ++--
 .../xcm-bridge-hub-router/src/benchmarking.rs |   0
 .../modules/xcm-bridge-hub-router/src/lib.rs  |   0
 .../modules/xcm-bridge-hub-router/src/mock.rs |   2 +-
 .../xcm-bridge-hub-router/src/weights.rs      |   0
 .../chain-asset-hub-kusama/Cargo.toml         |   2 +-
 .../chain-asset-hub-kusama/src/lib.rs         |   0
 .../chain-asset-hub-polkadot/Cargo.toml       |   4 +-
 .../chain-asset-hub-polkadot/src/lib.rs       |   0
 .../chain-bridge-hub-cumulus/Cargo.toml       |  10 +-
 .../chain-bridge-hub-cumulus/src/lib.rs       |  91 +---------------
 .../chain-bridge-hub-kusama/Cargo.toml        |   8 +-
 .../chain-bridge-hub-kusama/src/lib.rs        |   0
 .../chain-bridge-hub-polkadot/Cargo.toml      |   8 +-
 .../chain-bridge-hub-polkadot/src/lib.rs      |   0
 .../chain-bridge-hub-rococo/Cargo.toml        |   8 +-
 .../chain-bridge-hub-rococo/src/lib.rs        |   0
 .../chain-bridge-hub-wococo/Cargo.toml        |   8 +-
 .../chain-bridge-hub-wococo/src/lib.rs        |   0
 .../primitives/chain-kusama/Cargo.toml        |   6 +-
 .../primitives/chain-kusama/src/lib.rs        |   3 +
 .../primitives/chain-polkadot/Cargo.toml      |   6 +-
 .../primitives/chain-polkadot/src/lib.rs      |   5 +-
 .../primitives/chain-rococo/Cargo.toml        |   6 +-
 .../primitives/chain-rococo/src/lib.rs        |   3 +
 .../primitives/chain-wococo/Cargo.toml        |   6 +-
 .../primitives/chain-wococo/src/lib.rs        |   3 +
 .../primitives/header-chain/Cargo.toml        |  10 +-
 .../header-chain/src/justification/mod.rs     |   6 +-
 .../verification/equivocation.rs              |   0
 .../src/justification/verification/mod.rs     |   0
 .../justification/verification/optimizer.rs   |   0
 .../src/justification/verification/strict.rs  |   0
 .../primitives/header-chain/src/lib.rs        |   7 +-
 .../header-chain/src/storage_keys.rs          |   0
 .../tests/implementation_match.rs             |   0
 .../tests/justification/equivocation.rs       |   0
 .../tests/justification/optimizer.rs          |   0
 .../tests/justification/strict.rs             |   0
 .../primitives/header-chain/tests/tests.rs    |   0
 .../primitives/messages/Cargo.toml            |   6 +-
 .../primitives/messages/src/lib.rs            |   0
 .../primitives/messages/src/source_chain.rs   |   0
 .../primitives/messages/src/storage_keys.rs   |   0
 .../primitives/messages/src/target_chain.rs   |   0
 .../primitives/parachains/Cargo.toml          |   8 +-
 .../primitives/parachains/src/lib.rs          |   0
 .../primitives/polkadot-core/Cargo.toml       |  10 +-
 .../primitives/polkadot-core/src/lib.rs       | 103 +++++++++++++++++-
 .../polkadot-core/src/parachains.rs           |   0
 .../primitives/relayers/Cargo.toml            |   6 +-
 .../primitives/relayers/src/lib.rs            |   0
 .../primitives/relayers/src/registration.rs   |   0
 .../primitives/runtime/Cargo.toml             |  16 +--
 .../primitives/runtime/src/chain.rs           |   0
 .../primitives/runtime/src/extensions.rs      |  12 +-
 .../primitives/runtime/src/lib.rs             |   0
 .../primitives/runtime/src/messages.rs        |   0
 .../primitives/runtime/src/storage_proof.rs   |   0
 .../primitives/runtime/src/storage_types.rs   |   0
 .../primitives/test-utils/Cargo.toml          |  12 +-
 .../primitives/test-utils/src/keyring.rs      |   0
 .../primitives/test-utils/src/lib.rs          |   0
 .../xcm-bridge-hub-router/Cargo.toml          |   4 +-
 .../xcm-bridge-hub-router/src/lib.rs          |   0
 .../scripts/verify-pallets-build.sh           |   9 ++
 .../bridges/bridge-hub-rococo/Cargo.toml      |   4 +-
 .../emulated/common/Cargo.toml                |   6 +-
 .../bridge-hubs/bridge-hub-rococo/Cargo.toml  |  32 +++---
 .../bridge-hubs/bridge-hub-rococo/src/lib.rs  | 100 +++++++++--------
 .../bridge-hubs/test-utils/Cargo.toml         |  28 ++---
 .../bridges_update_subtree.sh                 |   0
 134 files changed, 398 insertions(+), 343 deletions(-)
 rename cumulus/BRIDGES.md => BRIDGES.md (100%)
 rename {cumulus/bridges => bridges}/.gitignore (100%)
 rename {cumulus/bridges => bridges}/CODE_OF_CONDUCT.md (100%)
 rename {cumulus/bridges => bridges}/LICENSE (100%)
 rename {cumulus/bridges => bridges}/README.md (100%)
 rename {cumulus/bridges => bridges}/SECURITY.md (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/Cargo.toml (72%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/integrity.rs (96%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/messages.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/messages_api.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/messages_benchmarking.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/messages_call_ext.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/messages_generation.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/messages_xcm_extension.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/mock.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/parachains_benchmarking.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/priority_calculator.rs (100%)
 rename {cumulus/bridges => bridges}/bin/runtime-common/src/refund_relayer_extension.rs (100%)
 rename {cumulus/bridges => bridges}/docs/complex-relay.html (100%)
 rename {cumulus/bridges => bridges}/docs/grandpa-finality-relay.html (100%)
 rename {cumulus/bridges => bridges}/docs/high-level-overview.md (100%)
 rename {cumulus/bridges => bridges}/docs/messages-relay.html (100%)
 rename {cumulus/bridges => bridges}/docs/parachains-finality-relay.html (100%)
 rename {cumulus/bridges => bridges}/docs/polkadot-kusama-bridge-overview.md (100%)
 rename {cumulus/bridges => bridges}/docs/polkadot-kusama-bridge.html (100%)
 rename {cumulus/bridges => bridges}/modules/grandpa/Cargo.toml (65%)
 rename {cumulus/bridges => bridges}/modules/grandpa/README.md (100%)
 rename {cumulus/bridges => bridges}/modules/grandpa/src/benchmarking.rs (100%)
 rename {cumulus/bridges => bridges}/modules/grandpa/src/call_ext.rs (100%)
 rename {cumulus/bridges => bridges}/modules/grandpa/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/modules/grandpa/src/mock.rs (100%)
 rename {cumulus/bridges => bridges}/modules/grandpa/src/storage_types.rs (100%)
 rename {cumulus/bridges => bridges}/modules/grandpa/src/weights.rs (100%)
 rename {cumulus/bridges => bridges}/modules/messages/Cargo.toml (67%)
 rename {cumulus/bridges => bridges}/modules/messages/README.md (100%)
 rename {cumulus/bridges => bridges}/modules/messages/src/benchmarking.rs (100%)
 rename {cumulus/bridges => bridges}/modules/messages/src/inbound_lane.rs (100%)
 rename {cumulus/bridges => bridges}/modules/messages/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/modules/messages/src/mock.rs (100%)
 rename {cumulus/bridges => bridges}/modules/messages/src/outbound_lane.rs (100%)
 rename {cumulus/bridges => bridges}/modules/messages/src/weights.rs (100%)
 rename {cumulus/bridges => bridges}/modules/messages/src/weights_ext.rs (100%)
 rename {cumulus/bridges => bridges}/modules/parachains/Cargo.toml (71%)
 rename {cumulus/bridges => bridges}/modules/parachains/README.md (100%)
 rename {cumulus/bridges => bridges}/modules/parachains/src/benchmarking.rs (100%)
 rename {cumulus/bridges => bridges}/modules/parachains/src/call_ext.rs (100%)
 rename {cumulus/bridges => bridges}/modules/parachains/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/modules/parachains/src/mock.rs (100%)
 rename {cumulus/bridges => bridges}/modules/parachains/src/weights.rs (100%)
 rename {cumulus/bridges => bridges}/modules/parachains/src/weights_ext.rs (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/Cargo.toml (66%)
 rename {cumulus/bridges => bridges}/modules/relayers/README.md (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/src/benchmarking.rs (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/src/mock.rs (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/src/payment_adapter.rs (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/src/stake_adapter.rs (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/src/weights.rs (100%)
 rename {cumulus/bridges => bridges}/modules/relayers/src/weights_ext.rs (100%)
 rename {cumulus/bridges => bridges}/modules/xcm-bridge-hub-router/Cargo.toml (59%)
 rename {cumulus/bridges => bridges}/modules/xcm-bridge-hub-router/src/benchmarking.rs (100%)
 rename {cumulus/bridges => bridges}/modules/xcm-bridge-hub-router/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/modules/xcm-bridge-hub-router/src/mock.rs (99%)
 rename {cumulus/bridges => bridges}/modules/xcm-bridge-hub-router/src/weights.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/chain-asset-hub-kusama/Cargo.toml (88%)
 rename {cumulus/bridges => bridges}/primitives/chain-asset-hub-kusama/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/chain-asset-hub-polkadot/Cargo.toml (79%)
 rename {cumulus/bridges => bridges}/primitives/chain-asset-hub-polkadot/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-cumulus/Cargo.toml (62%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-cumulus/src/lib.rs (72%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-kusama/Cargo.toml (66%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-kusama/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-polkadot/Cargo.toml (66%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-polkadot/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-rococo/Cargo.toml (66%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-rococo/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-wococo/Cargo.toml (66%)
 rename {cumulus/bridges => bridges}/primitives/chain-bridge-hub-wococo/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/chain-kusama/Cargo.toml (71%)
 rename {cumulus/bridges => bridges}/primitives/chain-kusama/src/lib.rs (96%)
 rename {cumulus/bridges => bridges}/primitives/chain-polkadot/Cargo.toml (71%)
 rename {cumulus/bridges => bridges}/primitives/chain-polkadot/src/lib.rs (92%)
 rename {cumulus/bridges => bridges}/primitives/chain-rococo/Cargo.toml (71%)
 rename {cumulus/bridges => bridges}/primitives/chain-rococo/src/lib.rs (96%)
 rename {cumulus/bridges => bridges}/primitives/chain-wococo/Cargo.toml (73%)
 rename {cumulus/bridges => bridges}/primitives/chain-wococo/src/lib.rs (96%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/Cargo.toml (66%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/src/justification/mod.rs (97%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/src/justification/verification/equivocation.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/src/justification/verification/mod.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/src/justification/verification/optimizer.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/src/justification/verification/strict.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/src/lib.rs (98%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/src/storage_keys.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/tests/implementation_match.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/tests/justification/equivocation.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/tests/justification/optimizer.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/tests/justification/strict.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/header-chain/tests/tests.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/messages/Cargo.toml (78%)
 rename {cumulus/bridges => bridges}/primitives/messages/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/messages/src/source_chain.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/messages/src/storage_keys.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/messages/src/target_chain.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/parachains/Cargo.toml (72%)
 rename {cumulus/bridges => bridges}/primitives/parachains/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/polkadot-core/Cargo.toml (69%)
 rename {cumulus/bridges => bridges}/primitives/polkadot-core/src/lib.rs (81%)
 rename {cumulus/bridges => bridges}/primitives/polkadot-core/src/parachains.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/relayers/Cargo.toml (74%)
 rename {cumulus/bridges => bridges}/primitives/relayers/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/relayers/src/registration.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/runtime/Cargo.toml (60%)
 rename {cumulus/bridges => bridges}/primitives/runtime/src/chain.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/runtime/src/extensions.rs (94%)
 rename {cumulus/bridges => bridges}/primitives/runtime/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/runtime/src/messages.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/runtime/src/storage_proof.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/runtime/src/storage_types.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/test-utils/Cargo.toml (63%)
 rename {cumulus/bridges => bridges}/primitives/test-utils/src/keyring.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/test-utils/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/primitives/xcm-bridge-hub-router/Cargo.toml (76%)
 rename {cumulus/bridges => bridges}/primitives/xcm-bridge-hub-router/src/lib.rs (100%)
 rename {cumulus/bridges => bridges}/scripts/verify-pallets-build.sh (93%)
 rename {cumulus/scripts => scripts}/bridges_update_subtree.sh (100%)

diff --git a/.github/pr-custom-review.yml b/.github/pr-custom-review.yml
index bc9a3cfb8d2..40fc53cbd02 100644
--- a/.github/pr-custom-review.yml
+++ b/.github/pr-custom-review.yml
@@ -39,7 +39,7 @@ rules:
   # if there are any changes in the bridges subtree (in case of backport changes back to bridges repo)
   - name: Bridges subtree files
     check_type: changed_files
-    condition: ^cumulus/bridges/.*
+    condition: ^bridges/.*
     min_approvals: 1
     teams:
       - bridges-core
diff --git a/cumulus/BRIDGES.md b/BRIDGES.md
similarity index 100%
rename from cumulus/BRIDGES.md
rename to BRIDGES.md
diff --git a/Cargo.toml b/Cargo.toml
index 8a9c2afe1d1..5c43990d472 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -8,31 +8,31 @@ license = "GPL-3.0-only"
 resolver = "2"
 
 members = [
-	"cumulus/bridges/bin/runtime-common",
-	"cumulus/bridges/modules/grandpa",
-	"cumulus/bridges/modules/messages",
-	"cumulus/bridges/modules/parachains",
-	"cumulus/bridges/modules/relayers",
-	"cumulus/bridges/modules/xcm-bridge-hub-router",
-	"cumulus/bridges/primitives/chain-asset-hub-kusama",
-	"cumulus/bridges/primitives/chain-asset-hub-polkadot",
-	"cumulus/bridges/primitives/chain-bridge-hub-cumulus",
-	"cumulus/bridges/primitives/chain-bridge-hub-kusama",
-	"cumulus/bridges/primitives/chain-bridge-hub-polkadot",
-	"cumulus/bridges/primitives/chain-bridge-hub-rococo",
-	"cumulus/bridges/primitives/chain-bridge-hub-wococo",
-	"cumulus/bridges/primitives/chain-kusama",
-	"cumulus/bridges/primitives/chain-polkadot",
-	"cumulus/bridges/primitives/chain-rococo",
-	"cumulus/bridges/primitives/chain-wococo",
-	"cumulus/bridges/primitives/header-chain",
-	"cumulus/bridges/primitives/messages",
-	"cumulus/bridges/primitives/parachains",
-	"cumulus/bridges/primitives/polkadot-core",
-	"cumulus/bridges/primitives/relayers",
-	"cumulus/bridges/primitives/runtime",
-	"cumulus/bridges/primitives/test-utils",
-	"cumulus/bridges/primitives/xcm-bridge-hub-router",
+	"bridges/bin/runtime-common",
+	"bridges/modules/grandpa",
+	"bridges/modules/messages",
+	"bridges/modules/parachains",
+	"bridges/modules/relayers",
+	"bridges/modules/xcm-bridge-hub-router",
+	"bridges/primitives/chain-asset-hub-kusama",
+	"bridges/primitives/chain-asset-hub-polkadot",
+	"bridges/primitives/chain-bridge-hub-cumulus",
+	"bridges/primitives/chain-bridge-hub-kusama",
+	"bridges/primitives/chain-bridge-hub-polkadot",
+	"bridges/primitives/chain-bridge-hub-rococo",
+	"bridges/primitives/chain-bridge-hub-wococo",
+	"bridges/primitives/chain-kusama",
+	"bridges/primitives/chain-polkadot",
+	"bridges/primitives/chain-rococo",
+	"bridges/primitives/chain-wococo",
+	"bridges/primitives/header-chain",
+	"bridges/primitives/messages",
+	"bridges/primitives/parachains",
+	"bridges/primitives/polkadot-core",
+	"bridges/primitives/relayers",
+	"bridges/primitives/runtime",
+	"bridges/primitives/test-utils",
+	"bridges/primitives/xcm-bridge-hub-router",
 	"cumulus/client/cli",
 	"cumulus/client/collator",
 	"cumulus/client/consensus/aura",
diff --git a/cumulus/bridges/.gitignore b/bridges/.gitignore
similarity index 100%
rename from cumulus/bridges/.gitignore
rename to bridges/.gitignore
diff --git a/cumulus/bridges/CODE_OF_CONDUCT.md b/bridges/CODE_OF_CONDUCT.md
similarity index 100%
rename from cumulus/bridges/CODE_OF_CONDUCT.md
rename to bridges/CODE_OF_CONDUCT.md
diff --git a/cumulus/bridges/LICENSE b/bridges/LICENSE
similarity index 100%
rename from cumulus/bridges/LICENSE
rename to bridges/LICENSE
diff --git a/cumulus/bridges/README.md b/bridges/README.md
similarity index 100%
rename from cumulus/bridges/README.md
rename to bridges/README.md
diff --git a/cumulus/bridges/SECURITY.md b/bridges/SECURITY.md
similarity index 100%
rename from cumulus/bridges/SECURITY.md
rename to bridges/SECURITY.md
diff --git a/cumulus/bridges/bin/runtime-common/Cargo.toml b/bridges/bin/runtime-common/Cargo.toml
similarity index 72%
rename from cumulus/bridges/bin/runtime-common/Cargo.toml
rename to bridges/bin/runtime-common/Cargo.toml
index b139f835c1a..5c3fefc69ce 100644
--- a/cumulus/bridges/bin/runtime-common/Cargo.toml
+++ b/bridges/bin/runtime-common/Cargo.toml
@@ -29,24 +29,24 @@ pallet-bridge-relayers = { path = "../../modules/relayers", default-features = f
 
 # Substrate dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-pallet-transaction-payment = { path = "../../../../substrate/frame/transaction-payment", default-features = false }
-pallet-utility = { path = "../../../../substrate/frame/utility", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-io = { path = "../../../../substrate/primitives/io", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
-sp-trie = { path = "../../../../substrate/primitives/trie", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+pallet-transaction-payment = { path = "../../../substrate/frame/transaction-payment", default-features = false }
+pallet-utility = { path = "../../../substrate/frame/utility", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-io = { path = "../../../substrate/primitives/io", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
+sp-trie = { path = "../../../substrate/primitives/trie", default-features = false }
 
 # Polkadot dependencies
-xcm = { package = "staging-xcm", path = "../../../../polkadot/xcm", default-features = false }
-xcm-builder = { package = "staging-xcm-builder", path = "../../../../polkadot/xcm/xcm-builder", default-features = false }
+xcm = { package = "staging-xcm", path = "../../../polkadot/xcm", default-features = false }
+xcm-builder = { package = "staging-xcm-builder", path = "../../../polkadot/xcm/xcm-builder", default-features = false }
 
 [dev-dependencies]
 bp-test-utils = { path = "../../primitives/test-utils" }
-pallet-balances = { path = "../../../../substrate/frame/balances" }
+pallet-balances = { path = "../../../substrate/frame/balances" }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/bin/runtime-common/src/integrity.rs b/bridges/bin/runtime-common/src/integrity.rs
similarity index 96%
rename from cumulus/bridges/bin/runtime-common/src/integrity.rs
rename to bridges/bin/runtime-common/src/integrity.rs
index 290c22f835d..d3827a14dd6 100644
--- a/cumulus/bridges/bin/runtime-common/src/integrity.rs
+++ b/bridges/bin/runtime-common/src/integrity.rs
@@ -27,7 +27,6 @@ use codec::Encode;
 use frame_support::{storage::generator::StorageValue, traits::Get, weights::Weight};
 use frame_system::limits;
 use pallet_bridge_messages::WeightInfoExt as _;
-use sp_runtime::traits::SignedExtension;
 
 /// Macro that ensures that the runtime configuration and chain primitives crate are sharing
 /// the same types (nonce, block number, hash, hasher, account id and header).
@@ -347,15 +346,3 @@ pub fn check_message_lane_weights<
 		);
 	}
 }
-
-/// Check that the `AdditionalSigned` type of a wrapped runtime is the same as the one of the
-/// corresponding actual runtime.
-///
-/// This method doesn't perform any `assert`. If the condition is not true it will generate a
-/// compile-time error.
-pub fn check_additional_signed<SignedExt, IndirectSignedExt: SignedExtension>()
-where
-	SignedExt: SignedExtension,
-	IndirectSignedExt: SignedExtension<AdditionalSigned = SignedExt::AdditionalSigned>,
-{
-}
diff --git a/cumulus/bridges/bin/runtime-common/src/lib.rs b/bridges/bin/runtime-common/src/lib.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/lib.rs
rename to bridges/bin/runtime-common/src/lib.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/messages.rs b/bridges/bin/runtime-common/src/messages.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/messages.rs
rename to bridges/bin/runtime-common/src/messages.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/messages_api.rs b/bridges/bin/runtime-common/src/messages_api.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/messages_api.rs
rename to bridges/bin/runtime-common/src/messages_api.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/messages_benchmarking.rs b/bridges/bin/runtime-common/src/messages_benchmarking.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/messages_benchmarking.rs
rename to bridges/bin/runtime-common/src/messages_benchmarking.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/messages_call_ext.rs b/bridges/bin/runtime-common/src/messages_call_ext.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/messages_call_ext.rs
rename to bridges/bin/runtime-common/src/messages_call_ext.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/messages_generation.rs b/bridges/bin/runtime-common/src/messages_generation.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/messages_generation.rs
rename to bridges/bin/runtime-common/src/messages_generation.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/messages_xcm_extension.rs b/bridges/bin/runtime-common/src/messages_xcm_extension.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/messages_xcm_extension.rs
rename to bridges/bin/runtime-common/src/messages_xcm_extension.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/mock.rs b/bridges/bin/runtime-common/src/mock.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/mock.rs
rename to bridges/bin/runtime-common/src/mock.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/parachains_benchmarking.rs b/bridges/bin/runtime-common/src/parachains_benchmarking.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/parachains_benchmarking.rs
rename to bridges/bin/runtime-common/src/parachains_benchmarking.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/priority_calculator.rs b/bridges/bin/runtime-common/src/priority_calculator.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/priority_calculator.rs
rename to bridges/bin/runtime-common/src/priority_calculator.rs
diff --git a/cumulus/bridges/bin/runtime-common/src/refund_relayer_extension.rs b/bridges/bin/runtime-common/src/refund_relayer_extension.rs
similarity index 100%
rename from cumulus/bridges/bin/runtime-common/src/refund_relayer_extension.rs
rename to bridges/bin/runtime-common/src/refund_relayer_extension.rs
diff --git a/cumulus/bridges/docs/complex-relay.html b/bridges/docs/complex-relay.html
similarity index 100%
rename from cumulus/bridges/docs/complex-relay.html
rename to bridges/docs/complex-relay.html
diff --git a/cumulus/bridges/docs/grandpa-finality-relay.html b/bridges/docs/grandpa-finality-relay.html
similarity index 100%
rename from cumulus/bridges/docs/grandpa-finality-relay.html
rename to bridges/docs/grandpa-finality-relay.html
diff --git a/cumulus/bridges/docs/high-level-overview.md b/bridges/docs/high-level-overview.md
similarity index 100%
rename from cumulus/bridges/docs/high-level-overview.md
rename to bridges/docs/high-level-overview.md
diff --git a/cumulus/bridges/docs/messages-relay.html b/bridges/docs/messages-relay.html
similarity index 100%
rename from cumulus/bridges/docs/messages-relay.html
rename to bridges/docs/messages-relay.html
diff --git a/cumulus/bridges/docs/parachains-finality-relay.html b/bridges/docs/parachains-finality-relay.html
similarity index 100%
rename from cumulus/bridges/docs/parachains-finality-relay.html
rename to bridges/docs/parachains-finality-relay.html
diff --git a/cumulus/bridges/docs/polkadot-kusama-bridge-overview.md b/bridges/docs/polkadot-kusama-bridge-overview.md
similarity index 100%
rename from cumulus/bridges/docs/polkadot-kusama-bridge-overview.md
rename to bridges/docs/polkadot-kusama-bridge-overview.md
diff --git a/cumulus/bridges/docs/polkadot-kusama-bridge.html b/bridges/docs/polkadot-kusama-bridge.html
similarity index 100%
rename from cumulus/bridges/docs/polkadot-kusama-bridge.html
rename to bridges/docs/polkadot-kusama-bridge.html
diff --git a/cumulus/bridges/modules/grandpa/Cargo.toml b/bridges/modules/grandpa/Cargo.toml
similarity index 65%
rename from cumulus/bridges/modules/grandpa/Cargo.toml
rename to bridges/modules/grandpa/Cargo.toml
index 87eda6b29a7..05d6a8e5c26 100644
--- a/cumulus/bridges/modules/grandpa/Cargo.toml
+++ b/bridges/modules/grandpa/Cargo.toml
@@ -20,20 +20,20 @@ bp-header-chain = { path = "../../primitives/header-chain", default-features = f
 
 # Substrate Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-sp-consensus-grandpa = { path = "../../../../substrate/primitives/consensus/grandpa", default-features = false, features = ["serde"] }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false, features = ["serde"] }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
-sp-trie = { path = "../../../../substrate/primitives/trie", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+sp-consensus-grandpa = { path = "../../../substrate/primitives/consensus/grandpa", default-features = false, features = ["serde"] }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false, features = ["serde"] }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
+sp-trie = { path = "../../../substrate/primitives/trie", default-features = false }
 
 # Optional Benchmarking Dependencies
 bp-test-utils = { path = "../../primitives/test-utils", default-features = false, optional = true }
-frame-benchmarking = { path = "../../../../substrate/frame/benchmarking", default-features = false, optional = true }
+frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
 
 [dev-dependencies]
-sp-core = { path = "../../../../substrate/primitives/core" }
-sp-io = { path = "../../../../substrate/primitives/io" }
+sp-core = { path = "../../../substrate/primitives/core" }
+sp-io = { path = "../../../substrate/primitives/io" }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/modules/grandpa/README.md b/bridges/modules/grandpa/README.md
similarity index 100%
rename from cumulus/bridges/modules/grandpa/README.md
rename to bridges/modules/grandpa/README.md
diff --git a/cumulus/bridges/modules/grandpa/src/benchmarking.rs b/bridges/modules/grandpa/src/benchmarking.rs
similarity index 100%
rename from cumulus/bridges/modules/grandpa/src/benchmarking.rs
rename to bridges/modules/grandpa/src/benchmarking.rs
diff --git a/cumulus/bridges/modules/grandpa/src/call_ext.rs b/bridges/modules/grandpa/src/call_ext.rs
similarity index 100%
rename from cumulus/bridges/modules/grandpa/src/call_ext.rs
rename to bridges/modules/grandpa/src/call_ext.rs
diff --git a/cumulus/bridges/modules/grandpa/src/lib.rs b/bridges/modules/grandpa/src/lib.rs
similarity index 100%
rename from cumulus/bridges/modules/grandpa/src/lib.rs
rename to bridges/modules/grandpa/src/lib.rs
diff --git a/cumulus/bridges/modules/grandpa/src/mock.rs b/bridges/modules/grandpa/src/mock.rs
similarity index 100%
rename from cumulus/bridges/modules/grandpa/src/mock.rs
rename to bridges/modules/grandpa/src/mock.rs
diff --git a/cumulus/bridges/modules/grandpa/src/storage_types.rs b/bridges/modules/grandpa/src/storage_types.rs
similarity index 100%
rename from cumulus/bridges/modules/grandpa/src/storage_types.rs
rename to bridges/modules/grandpa/src/storage_types.rs
diff --git a/cumulus/bridges/modules/grandpa/src/weights.rs b/bridges/modules/grandpa/src/weights.rs
similarity index 100%
rename from cumulus/bridges/modules/grandpa/src/weights.rs
rename to bridges/modules/grandpa/src/weights.rs
diff --git a/cumulus/bridges/modules/messages/Cargo.toml b/bridges/modules/messages/Cargo.toml
similarity index 67%
rename from cumulus/bridges/modules/messages/Cargo.toml
rename to bridges/modules/messages/Cargo.toml
index 5eecdb147fa..7b7ea061981 100644
--- a/cumulus/bridges/modules/messages/Cargo.toml
+++ b/bridges/modules/messages/Cargo.toml
@@ -19,17 +19,17 @@ bp-runtime = { path = "../../primitives/runtime", default-features = false }
 
 # Substrate Dependencies
 
-frame-benchmarking = { path = "../../../../substrate/frame/benchmarking", default-features = false, optional = true }
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [dev-dependencies]
 bp-test-utils = { path = "../../primitives/test-utils" }
-pallet-balances = { path = "../../../../substrate/frame/balances" }
-sp-io = { path = "../../../../substrate/primitives/io" }
+pallet-balances = { path = "../../../substrate/frame/balances" }
+sp-io = { path = "../../../substrate/primitives/io" }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/modules/messages/README.md b/bridges/modules/messages/README.md
similarity index 100%
rename from cumulus/bridges/modules/messages/README.md
rename to bridges/modules/messages/README.md
diff --git a/cumulus/bridges/modules/messages/src/benchmarking.rs b/bridges/modules/messages/src/benchmarking.rs
similarity index 100%
rename from cumulus/bridges/modules/messages/src/benchmarking.rs
rename to bridges/modules/messages/src/benchmarking.rs
diff --git a/cumulus/bridges/modules/messages/src/inbound_lane.rs b/bridges/modules/messages/src/inbound_lane.rs
similarity index 100%
rename from cumulus/bridges/modules/messages/src/inbound_lane.rs
rename to bridges/modules/messages/src/inbound_lane.rs
diff --git a/cumulus/bridges/modules/messages/src/lib.rs b/bridges/modules/messages/src/lib.rs
similarity index 100%
rename from cumulus/bridges/modules/messages/src/lib.rs
rename to bridges/modules/messages/src/lib.rs
diff --git a/cumulus/bridges/modules/messages/src/mock.rs b/bridges/modules/messages/src/mock.rs
similarity index 100%
rename from cumulus/bridges/modules/messages/src/mock.rs
rename to bridges/modules/messages/src/mock.rs
diff --git a/cumulus/bridges/modules/messages/src/outbound_lane.rs b/bridges/modules/messages/src/outbound_lane.rs
similarity index 100%
rename from cumulus/bridges/modules/messages/src/outbound_lane.rs
rename to bridges/modules/messages/src/outbound_lane.rs
diff --git a/cumulus/bridges/modules/messages/src/weights.rs b/bridges/modules/messages/src/weights.rs
similarity index 100%
rename from cumulus/bridges/modules/messages/src/weights.rs
rename to bridges/modules/messages/src/weights.rs
diff --git a/cumulus/bridges/modules/messages/src/weights_ext.rs b/bridges/modules/messages/src/weights_ext.rs
similarity index 100%
rename from cumulus/bridges/modules/messages/src/weights_ext.rs
rename to bridges/modules/messages/src/weights_ext.rs
diff --git a/cumulus/bridges/modules/parachains/Cargo.toml b/bridges/modules/parachains/Cargo.toml
similarity index 71%
rename from cumulus/bridges/modules/parachains/Cargo.toml
rename to bridges/modules/parachains/Cargo.toml
index 50a838edf56..4eb09ed78d1 100644
--- a/cumulus/bridges/modules/parachains/Cargo.toml
+++ b/bridges/modules/parachains/Cargo.toml
@@ -20,18 +20,18 @@ pallet-bridge-grandpa = { path = "../grandpa", default-features = false }
 
 # Substrate Dependencies
 
-frame-benchmarking = { path = "../../../../substrate/frame/benchmarking", default-features = false, optional = true }
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
-sp-trie = { path = "../../../../substrate/primitives/trie", default-features = false }
+frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
+sp-trie = { path = "../../../substrate/primitives/trie", default-features = false }
 
 [dev-dependencies]
 bp-header-chain = { path = "../../primitives/header-chain" }
 bp-test-utils = { path = "../../primitives/test-utils" }
-sp-core = { path = "../../../../substrate/primitives/core" }
-sp-io = { path = "../../../../substrate/primitives/io" }
+sp-core = { path = "../../../substrate/primitives/core" }
+sp-io = { path = "../../../substrate/primitives/io" }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/modules/parachains/README.md b/bridges/modules/parachains/README.md
similarity index 100%
rename from cumulus/bridges/modules/parachains/README.md
rename to bridges/modules/parachains/README.md
diff --git a/cumulus/bridges/modules/parachains/src/benchmarking.rs b/bridges/modules/parachains/src/benchmarking.rs
similarity index 100%
rename from cumulus/bridges/modules/parachains/src/benchmarking.rs
rename to bridges/modules/parachains/src/benchmarking.rs
diff --git a/cumulus/bridges/modules/parachains/src/call_ext.rs b/bridges/modules/parachains/src/call_ext.rs
similarity index 100%
rename from cumulus/bridges/modules/parachains/src/call_ext.rs
rename to bridges/modules/parachains/src/call_ext.rs
diff --git a/cumulus/bridges/modules/parachains/src/lib.rs b/bridges/modules/parachains/src/lib.rs
similarity index 100%
rename from cumulus/bridges/modules/parachains/src/lib.rs
rename to bridges/modules/parachains/src/lib.rs
diff --git a/cumulus/bridges/modules/parachains/src/mock.rs b/bridges/modules/parachains/src/mock.rs
similarity index 100%
rename from cumulus/bridges/modules/parachains/src/mock.rs
rename to bridges/modules/parachains/src/mock.rs
diff --git a/cumulus/bridges/modules/parachains/src/weights.rs b/bridges/modules/parachains/src/weights.rs
similarity index 100%
rename from cumulus/bridges/modules/parachains/src/weights.rs
rename to bridges/modules/parachains/src/weights.rs
diff --git a/cumulus/bridges/modules/parachains/src/weights_ext.rs b/bridges/modules/parachains/src/weights_ext.rs
similarity index 100%
rename from cumulus/bridges/modules/parachains/src/weights_ext.rs
rename to bridges/modules/parachains/src/weights_ext.rs
diff --git a/cumulus/bridges/modules/relayers/Cargo.toml b/bridges/modules/relayers/Cargo.toml
similarity index 66%
rename from cumulus/bridges/modules/relayers/Cargo.toml
rename to bridges/modules/relayers/Cargo.toml
index 3a7a57e1801..46fc3bb43b1 100644
--- a/cumulus/bridges/modules/relayers/Cargo.toml
+++ b/bridges/modules/relayers/Cargo.toml
@@ -20,19 +20,19 @@ pallet-bridge-messages = { path = "../messages", default-features = false }
 
 # Substrate Dependencies
 
-frame-benchmarking = { path = "../../../../substrate/frame/benchmarking", default-features = false, optional = true }
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-sp-arithmetic = { path = "../../../../substrate/primitives/arithmetic", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+sp-arithmetic = { path = "../../../substrate/primitives/arithmetic", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [dev-dependencies]
 bp-runtime = { path = "../../primitives/runtime" }
-pallet-balances = { path = "../../../../substrate/frame/balances" }
-sp-core = { path = "../../../../substrate/primitives/core" }
-sp-io = { path = "../../../../substrate/primitives/io" }
-sp-runtime = { path = "../../../../substrate/primitives/runtime" }
+pallet-balances = { path = "../../../substrate/frame/balances" }
+sp-core = { path = "../../../substrate/primitives/core" }
+sp-io = { path = "../../../substrate/primitives/io" }
+sp-runtime = { path = "../../../substrate/primitives/runtime" }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/modules/relayers/README.md b/bridges/modules/relayers/README.md
similarity index 100%
rename from cumulus/bridges/modules/relayers/README.md
rename to bridges/modules/relayers/README.md
diff --git a/cumulus/bridges/modules/relayers/src/benchmarking.rs b/bridges/modules/relayers/src/benchmarking.rs
similarity index 100%
rename from cumulus/bridges/modules/relayers/src/benchmarking.rs
rename to bridges/modules/relayers/src/benchmarking.rs
diff --git a/cumulus/bridges/modules/relayers/src/lib.rs b/bridges/modules/relayers/src/lib.rs
similarity index 100%
rename from cumulus/bridges/modules/relayers/src/lib.rs
rename to bridges/modules/relayers/src/lib.rs
diff --git a/cumulus/bridges/modules/relayers/src/mock.rs b/bridges/modules/relayers/src/mock.rs
similarity index 100%
rename from cumulus/bridges/modules/relayers/src/mock.rs
rename to bridges/modules/relayers/src/mock.rs
diff --git a/cumulus/bridges/modules/relayers/src/payment_adapter.rs b/bridges/modules/relayers/src/payment_adapter.rs
similarity index 100%
rename from cumulus/bridges/modules/relayers/src/payment_adapter.rs
rename to bridges/modules/relayers/src/payment_adapter.rs
diff --git a/cumulus/bridges/modules/relayers/src/stake_adapter.rs b/bridges/modules/relayers/src/stake_adapter.rs
similarity index 100%
rename from cumulus/bridges/modules/relayers/src/stake_adapter.rs
rename to bridges/modules/relayers/src/stake_adapter.rs
diff --git a/cumulus/bridges/modules/relayers/src/weights.rs b/bridges/modules/relayers/src/weights.rs
similarity index 100%
rename from cumulus/bridges/modules/relayers/src/weights.rs
rename to bridges/modules/relayers/src/weights.rs
diff --git a/cumulus/bridges/modules/relayers/src/weights_ext.rs b/bridges/modules/relayers/src/weights_ext.rs
similarity index 100%
rename from cumulus/bridges/modules/relayers/src/weights_ext.rs
rename to bridges/modules/relayers/src/weights_ext.rs
diff --git a/cumulus/bridges/modules/xcm-bridge-hub-router/Cargo.toml b/bridges/modules/xcm-bridge-hub-router/Cargo.toml
similarity index 59%
rename from cumulus/bridges/modules/xcm-bridge-hub-router/Cargo.toml
rename to bridges/modules/xcm-bridge-hub-router/Cargo.toml
index 6ad3c57ca73..c61cab291e1 100644
--- a/cumulus/bridges/modules/xcm-bridge-hub-router/Cargo.toml
+++ b/bridges/modules/xcm-bridge-hub-router/Cargo.toml
@@ -8,7 +8,7 @@ license = "GPL-3.0-or-later WITH Classpath-exception-2.0"
 
 [dependencies]
 codec = { package = "parity-scale-codec", version = "3.1.5", default-features = false }
-log = { version = "0.4.19", default-features = false }
+log = { version = "0.4.20", default-features = false }
 scale-info = { version = "2.8.0", default-features = false, features = ["bit-vec", "derive", "serde"] }
 
 # Bridge dependencies
@@ -17,21 +17,21 @@ bp-xcm-bridge-hub-router = { path = "../../primitives/xcm-bridge-hub-router", de
 
 # Substrate Dependencies
 
-frame-benchmarking = { path = "../../../../substrate/frame/benchmarking", default-features = false, optional = true }
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-benchmarking = { path = "../../../substrate/frame/benchmarking", default-features = false, optional = true }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 # Polkadot Dependencies
 
-xcm = { package = "staging-xcm", path = "../../../../polkadot/xcm", default-features = false }
-xcm-builder = { package = "staging-xcm-builder", path = "../../../../polkadot/xcm/xcm-builder", default-features = false }
+xcm = { package = "staging-xcm", path = "../../../polkadot/xcm", default-features = false }
+xcm-builder = { package = "staging-xcm-builder", path = "../../../polkadot/xcm/xcm-builder", default-features = false }
 
 [dev-dependencies]
-sp-io = { path = "../../../../substrate/primitives/io" }
-sp-std = { path = "../../../../substrate/primitives/std" }
+sp-io = { path = "../../../substrate/primitives/io" }
+sp-std = { path = "../../../substrate/primitives/std" }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs b/bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs
similarity index 100%
rename from cumulus/bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs
rename to bridges/modules/xcm-bridge-hub-router/src/benchmarking.rs
diff --git a/cumulus/bridges/modules/xcm-bridge-hub-router/src/lib.rs b/bridges/modules/xcm-bridge-hub-router/src/lib.rs
similarity index 100%
rename from cumulus/bridges/modules/xcm-bridge-hub-router/src/lib.rs
rename to bridges/modules/xcm-bridge-hub-router/src/lib.rs
diff --git a/cumulus/bridges/modules/xcm-bridge-hub-router/src/mock.rs b/bridges/modules/xcm-bridge-hub-router/src/mock.rs
similarity index 99%
rename from cumulus/bridges/modules/xcm-bridge-hub-router/src/mock.rs
rename to bridges/modules/xcm-bridge-hub-router/src/mock.rs
index cd50b98a168..58df21a6d90 100644
--- a/cumulus/bridges/modules/xcm-bridge-hub-router/src/mock.rs
+++ b/bridges/modules/xcm-bridge-hub-router/src/mock.rs
@@ -144,5 +144,5 @@ pub fn new_test_ext() -> sp_io::TestExternalities {
 
 /// Run pallet test.
 pub fn run_test<T>(test: impl FnOnce() -> T) -> T {
-	new_test_ext().execute_with(|| test())
+	new_test_ext().execute_with(test)
 }
diff --git a/cumulus/bridges/modules/xcm-bridge-hub-router/src/weights.rs b/bridges/modules/xcm-bridge-hub-router/src/weights.rs
similarity index 100%
rename from cumulus/bridges/modules/xcm-bridge-hub-router/src/weights.rs
rename to bridges/modules/xcm-bridge-hub-router/src/weights.rs
diff --git a/cumulus/bridges/primitives/chain-asset-hub-kusama/Cargo.toml b/bridges/primitives/chain-asset-hub-kusama/Cargo.toml
similarity index 88%
rename from cumulus/bridges/primitives/chain-asset-hub-kusama/Cargo.toml
rename to bridges/primitives/chain-asset-hub-kusama/Cargo.toml
index 557f56bfb62..adb9a57bc13 100644
--- a/cumulus/bridges/primitives/chain-asset-hub-kusama/Cargo.toml
+++ b/bridges/primitives/chain-asset-hub-kusama/Cargo.toml
@@ -11,7 +11,7 @@ codec = { package = "parity-scale-codec", version = "3.1.5", default-features =
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 
 # Substrate Dependencies
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
 
 # Bridge Dependencies
 bp-xcm-bridge-hub-router = { path = "../xcm-bridge-hub-router", default-features = false }
diff --git a/cumulus/bridges/primitives/chain-asset-hub-kusama/src/lib.rs b/bridges/primitives/chain-asset-hub-kusama/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/chain-asset-hub-kusama/src/lib.rs
rename to bridges/primitives/chain-asset-hub-kusama/src/lib.rs
diff --git a/cumulus/bridges/primitives/chain-asset-hub-polkadot/Cargo.toml b/bridges/primitives/chain-asset-hub-polkadot/Cargo.toml
similarity index 79%
rename from cumulus/bridges/primitives/chain-asset-hub-polkadot/Cargo.toml
rename to bridges/primitives/chain-asset-hub-polkadot/Cargo.toml
index 6fe9ffab44b..857ead15b0d 100644
--- a/cumulus/bridges/primitives/chain-asset-hub-polkadot/Cargo.toml
+++ b/bridges/primitives/chain-asset-hub-polkadot/Cargo.toml
@@ -11,8 +11,8 @@ codec = { package = "parity-scale-codec", version = "3.1.5", default-features =
 scale-info = { version = "2.9.0", default-features = false, features = ["derive"] }
 
 # Substrate Dependencies
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
 
 # Bridge Dependencies
 bp-xcm-bridge-hub-router = { path = "../xcm-bridge-hub-router", default-features = false }
diff --git a/cumulus/bridges/primitives/chain-asset-hub-polkadot/src/lib.rs b/bridges/primitives/chain-asset-hub-polkadot/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/chain-asset-hub-polkadot/src/lib.rs
rename to bridges/primitives/chain-asset-hub-polkadot/src/lib.rs
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-cumulus/Cargo.toml b/bridges/primitives/chain-bridge-hub-cumulus/Cargo.toml
similarity index 62%
rename from cumulus/bridges/primitives/chain-bridge-hub-cumulus/Cargo.toml
rename to bridges/primitives/chain-bridge-hub-cumulus/Cargo.toml
index 865cead3c87..24cf7236d45 100644
--- a/cumulus/bridges/primitives/chain-bridge-hub-cumulus/Cargo.toml
+++ b/bridges/primitives/chain-bridge-hub-cumulus/Cargo.toml
@@ -15,13 +15,13 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 # Polkadot Dependencies
-polkadot-primitives = { path = "../../../../polkadot/primitives", default-features = false }
+polkadot-primitives = { path = "../../../polkadot/primitives", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-cumulus/src/lib.rs b/bridges/primitives/chain-bridge-hub-cumulus/src/lib.rs
similarity index 72%
rename from cumulus/bridges/primitives/chain-bridge-hub-cumulus/src/lib.rs
rename to bridges/primitives/chain-bridge-hub-cumulus/src/lib.rs
index feef61c7f20..c1dbc6db36f 100644
--- a/cumulus/bridges/primitives/chain-bridge-hub-cumulus/src/lib.rs
+++ b/bridges/primitives/chain-bridge-hub-cumulus/src/lib.rs
@@ -23,10 +23,9 @@ pub use bp_polkadot_core::{
 };
 
 use bp_messages::*;
+use bp_polkadot_core::SuffixedCommonSignedExtension;
 use bp_runtime::extensions::{
-	BridgeRejectObsoleteHeadersAndMessages, ChargeTransactionPayment, CheckEra, CheckGenesis,
-	CheckNonZeroSender, CheckNonce, CheckSpecVersion, CheckTxVersion, CheckWeight,
-	GenericSignedExtension, RefundBridgedParachainMessagesSchema,
+	BridgeRejectObsoleteHeadersAndMessages, RefundBridgedParachainMessagesSchema,
 };
 use frame_support::{
 	dispatch::DispatchClass,
@@ -133,88 +132,8 @@ pub const MAX_UNREWARDED_RELAYERS_IN_CONFIRMATION_TX: MessageNonce = 1024;
 /// analysis (like the one above).
 pub const MAX_UNCONFIRMED_MESSAGES_IN_CONFIRMATION_TX: MessageNonce = 4096;
 
-/// Extra signed extension data that is used by all bridge hubs.
-pub type SignedExtra = (
-	CheckNonZeroSender,
-	CheckSpecVersion,
-	CheckTxVersion,
-	CheckGenesis<Hash>,
-	CheckEra<Hash>,
-	CheckNonce<Nonce>,
-	CheckWeight,
-	ChargeTransactionPayment<Balance>,
+/// Signed extension that is used by all bridge hubs.
+pub type SignedExtension = SuffixedCommonSignedExtension<(
 	BridgeRejectObsoleteHeadersAndMessages,
 	RefundBridgedParachainMessagesSchema,
-);
-
-/// Signed extension that is used by all bridge hubs.
-pub type SignedExtension = GenericSignedExtension<SignedExtra>;
-
-/// Helper trait to define some extra methods on bridge hubs signed extension (and
-/// overcome Rust limitations).
-pub trait BridgeHubSignedExtension {
-	/// Create signed extension from its components.
-	fn from_params(
-		spec_version: u32,
-		transaction_version: u32,
-		era: bp_runtime::TransactionEra<BlockNumber, Hash>,
-		genesis_hash: Hash,
-		nonce: Nonce,
-		tip: Balance,
-	) -> Self;
-
-	/// Return transaction nonce.
-	fn nonce(&self) -> Nonce;
-
-	/// Return transaction tip.
-	fn tip(&self) -> Balance;
-}
-
-impl BridgeHubSignedExtension for SignedExtension {
-	/// Create signed extension from its components.
-	fn from_params(
-		spec_version: u32,
-		transaction_version: u32,
-		era: bp_runtime::TransactionEra<BlockNumber, Hash>,
-		genesis_hash: Hash,
-		nonce: Nonce,
-		tip: Balance,
-	) -> Self {
-		GenericSignedExtension::new(
-			(
-				(),              // non-zero sender
-				(),              // spec version
-				(),              // tx version
-				(),              // genesis
-				era.frame_era(), // era
-				nonce.into(),    // nonce (compact encoding)
-				(),              // Check weight
-				tip.into(),      // transaction payment / tip (compact encoding)
-				(),              // bridge reject obsolete headers and msgs
-				(),              // bridge reward to relayer for message passing
-			),
-			Some((
-				(),
-				spec_version,
-				transaction_version,
-				genesis_hash,
-				era.signed_payload(genesis_hash),
-				(),
-				(),
-				(),
-				(),
-				(),
-			)),
-		)
-	}
-
-	/// Return transaction nonce.
-	fn nonce(&self) -> Nonce {
-		self.payload.5 .0
-	}
-
-	/// Return transaction tip.
-	fn tip(&self) -> Balance {
-		self.payload.7 .0
-	}
-}
+)>;
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-kusama/Cargo.toml b/bridges/primitives/chain-bridge-hub-kusama/Cargo.toml
similarity index 66%
rename from cumulus/bridges/primitives/chain-bridge-hub-kusama/Cargo.toml
rename to bridges/primitives/chain-bridge-hub-kusama/Cargo.toml
index 92b0c9bf447..387f5e8ade6 100644
--- a/cumulus/bridges/primitives/chain-bridge-hub-kusama/Cargo.toml
+++ b/bridges/primitives/chain-bridge-hub-kusama/Cargo.toml
@@ -15,10 +15,10 @@ bp-messages = { path = "../messages", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-kusama/src/lib.rs b/bridges/primitives/chain-bridge-hub-kusama/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/chain-bridge-hub-kusama/src/lib.rs
rename to bridges/primitives/chain-bridge-hub-kusama/src/lib.rs
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-polkadot/Cargo.toml b/bridges/primitives/chain-bridge-hub-polkadot/Cargo.toml
similarity index 66%
rename from cumulus/bridges/primitives/chain-bridge-hub-polkadot/Cargo.toml
rename to bridges/primitives/chain-bridge-hub-polkadot/Cargo.toml
index 7468d5be60d..40b386e22d2 100644
--- a/cumulus/bridges/primitives/chain-bridge-hub-polkadot/Cargo.toml
+++ b/bridges/primitives/chain-bridge-hub-polkadot/Cargo.toml
@@ -16,10 +16,10 @@ bp-messages = { path = "../messages", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-polkadot/src/lib.rs b/bridges/primitives/chain-bridge-hub-polkadot/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/chain-bridge-hub-polkadot/src/lib.rs
rename to bridges/primitives/chain-bridge-hub-polkadot/src/lib.rs
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-rococo/Cargo.toml b/bridges/primitives/chain-bridge-hub-rococo/Cargo.toml
similarity index 66%
rename from cumulus/bridges/primitives/chain-bridge-hub-rococo/Cargo.toml
rename to bridges/primitives/chain-bridge-hub-rococo/Cargo.toml
index 8dde903701c..05b8163e9fc 100644
--- a/cumulus/bridges/primitives/chain-bridge-hub-rococo/Cargo.toml
+++ b/bridges/primitives/chain-bridge-hub-rococo/Cargo.toml
@@ -15,10 +15,10 @@ bp-messages = { path = "../messages", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-rococo/src/lib.rs b/bridges/primitives/chain-bridge-hub-rococo/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/chain-bridge-hub-rococo/src/lib.rs
rename to bridges/primitives/chain-bridge-hub-rococo/src/lib.rs
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-wococo/Cargo.toml b/bridges/primitives/chain-bridge-hub-wococo/Cargo.toml
similarity index 66%
rename from cumulus/bridges/primitives/chain-bridge-hub-wococo/Cargo.toml
rename to bridges/primitives/chain-bridge-hub-wococo/Cargo.toml
index c93cdad5110..17c134f4412 100644
--- a/cumulus/bridges/primitives/chain-bridge-hub-wococo/Cargo.toml
+++ b/bridges/primitives/chain-bridge-hub-wococo/Cargo.toml
@@ -16,10 +16,10 @@ bp-messages = { path = "../messages", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-bridge-hub-wococo/src/lib.rs b/bridges/primitives/chain-bridge-hub-wococo/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/chain-bridge-hub-wococo/src/lib.rs
rename to bridges/primitives/chain-bridge-hub-wococo/src/lib.rs
diff --git a/cumulus/bridges/primitives/chain-kusama/Cargo.toml b/bridges/primitives/chain-kusama/Cargo.toml
similarity index 71%
rename from cumulus/bridges/primitives/chain-kusama/Cargo.toml
rename to bridges/primitives/chain-kusama/Cargo.toml
index e404bdb3d94..2d63c3f374f 100644
--- a/cumulus/bridges/primitives/chain-kusama/Cargo.toml
+++ b/bridges/primitives/chain-kusama/Cargo.toml
@@ -16,9 +16,9 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-kusama/src/lib.rs b/bridges/primitives/chain-kusama/src/lib.rs
similarity index 96%
rename from cumulus/bridges/primitives/chain-kusama/src/lib.rs
rename to bridges/primitives/chain-kusama/src/lib.rs
index e234a87b6cf..8c3fbd9c203 100644
--- a/cumulus/bridges/primitives/chain-kusama/src/lib.rs
+++ b/bridges/primitives/chain-kusama/src/lib.rs
@@ -57,6 +57,9 @@ impl ChainWithGrandpa for Kusama {
 	const AVERAGE_HEADER_SIZE_IN_JUSTIFICATION: u32 = AVERAGE_HEADER_SIZE_IN_JUSTIFICATION;
 }
 
+// The SignedExtension used by Kusama.
+pub use bp_polkadot_core::CommonSignedExtension as SignedExtension;
+
 /// Name of the parachains pallet in the Kusama runtime.
 pub const PARAS_PALLET_NAME: &str = "Paras";
 
diff --git a/cumulus/bridges/primitives/chain-polkadot/Cargo.toml b/bridges/primitives/chain-polkadot/Cargo.toml
similarity index 71%
rename from cumulus/bridges/primitives/chain-polkadot/Cargo.toml
rename to bridges/primitives/chain-polkadot/Cargo.toml
index 4d9bf8c182f..539b10ef9c6 100644
--- a/cumulus/bridges/primitives/chain-polkadot/Cargo.toml
+++ b/bridges/primitives/chain-polkadot/Cargo.toml
@@ -16,9 +16,9 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-polkadot/src/lib.rs b/bridges/primitives/chain-polkadot/src/lib.rs
similarity index 92%
rename from cumulus/bridges/primitives/chain-polkadot/src/lib.rs
rename to bridges/primitives/chain-polkadot/src/lib.rs
index 9585fd4d716..d1d6f745431 100644
--- a/cumulus/bridges/primitives/chain-polkadot/src/lib.rs
+++ b/bridges/primitives/chain-polkadot/src/lib.rs
@@ -21,7 +21,7 @@
 pub use bp_polkadot_core::*;
 
 use bp_header_chain::ChainWithGrandpa;
-use bp_runtime::{decl_bridge_finality_runtime_apis, Chain};
+use bp_runtime::{decl_bridge_finality_runtime_apis, extensions::PrevalidateAttests, Chain};
 use frame_support::weights::Weight;
 use sp_std::prelude::Vec;
 
@@ -57,6 +57,9 @@ impl ChainWithGrandpa for Polkadot {
 	const AVERAGE_HEADER_SIZE_IN_JUSTIFICATION: u32 = AVERAGE_HEADER_SIZE_IN_JUSTIFICATION;
 }
 
+/// The SignedExtension used by Polkadot.
+pub type SignedExtension = SuffixedCommonSignedExtension<PrevalidateAttests>;
+
 /// Name of the parachains pallet in the Polkadot runtime.
 pub const PARAS_PALLET_NAME: &str = "Paras";
 
diff --git a/cumulus/bridges/primitives/chain-rococo/Cargo.toml b/bridges/primitives/chain-rococo/Cargo.toml
similarity index 71%
rename from cumulus/bridges/primitives/chain-rococo/Cargo.toml
rename to bridges/primitives/chain-rococo/Cargo.toml
index 72c6d4c03b6..3c4d3917bc2 100644
--- a/cumulus/bridges/primitives/chain-rococo/Cargo.toml
+++ b/bridges/primitives/chain-rococo/Cargo.toml
@@ -16,9 +16,9 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate Based Dependencies
 
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-rococo/src/lib.rs b/bridges/primitives/chain-rococo/src/lib.rs
similarity index 96%
rename from cumulus/bridges/primitives/chain-rococo/src/lib.rs
rename to bridges/primitives/chain-rococo/src/lib.rs
index cf7cd16990f..1589d14ea51 100644
--- a/cumulus/bridges/primitives/chain-rococo/src/lib.rs
+++ b/bridges/primitives/chain-rococo/src/lib.rs
@@ -61,6 +61,9 @@ parameter_types! {
 	pub const SS58Prefix: u8 = 42;
 }
 
+// The SignedExtension used by Rococo.
+pub use bp_polkadot_core::CommonSignedExtension as SignedExtension;
+
 /// Name of the parachains pallet in the Rococo runtime.
 pub const PARAS_PALLET_NAME: &str = "Paras";
 
diff --git a/cumulus/bridges/primitives/chain-wococo/Cargo.toml b/bridges/primitives/chain-wococo/Cargo.toml
similarity index 73%
rename from cumulus/bridges/primitives/chain-wococo/Cargo.toml
rename to bridges/primitives/chain-wococo/Cargo.toml
index f7feb7f96eb..05901821b36 100644
--- a/cumulus/bridges/primitives/chain-wococo/Cargo.toml
+++ b/bridges/primitives/chain-wococo/Cargo.toml
@@ -17,9 +17,9 @@ bp-rococo = { path = "../chain-rococo", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-api = { path = "../../../../substrate/primitives/api", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-api = { path = "../../../substrate/primitives/api", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/chain-wococo/src/lib.rs b/bridges/primitives/chain-wococo/src/lib.rs
similarity index 96%
rename from cumulus/bridges/primitives/chain-wococo/src/lib.rs
rename to bridges/primitives/chain-wococo/src/lib.rs
index c64451993ee..5b5bde82690 100644
--- a/cumulus/bridges/primitives/chain-wococo/src/lib.rs
+++ b/bridges/primitives/chain-wococo/src/lib.rs
@@ -60,6 +60,9 @@ impl ChainWithGrandpa for Wococo {
 	const AVERAGE_HEADER_SIZE_IN_JUSTIFICATION: u32 = AVERAGE_HEADER_SIZE_IN_JUSTIFICATION;
 }
 
+// The SignedExtension used by Wococo.
+pub use bp_rococo::CommonSignedExtension as SignedExtension;
+
 /// Name of the With-Wococo GRANDPA pallet instance that is deployed at bridged chains.
 pub const WITH_WOCOCO_GRANDPA_PALLET_NAME: &str = "BridgeWococoGrandpa";
 
diff --git a/cumulus/bridges/primitives/header-chain/Cargo.toml b/bridges/primitives/header-chain/Cargo.toml
similarity index 66%
rename from cumulus/bridges/primitives/header-chain/Cargo.toml
rename to bridges/primitives/header-chain/Cargo.toml
index a7b53b0336d..e3e83235960 100644
--- a/cumulus/bridges/primitives/header-chain/Cargo.toml
+++ b/bridges/primitives/header-chain/Cargo.toml
@@ -18,11 +18,11 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false, features = ["serde"] }
-sp-consensus-grandpa = { path = "../../../../substrate/primitives/consensus/grandpa", default-features = false, features = ["serde"] }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false, features = ["serde"] }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false, features = ["serde"] }
+sp-consensus-grandpa = { path = "../../../substrate/primitives/consensus/grandpa", default-features = false, features = ["serde"] }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false, features = ["serde"] }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [dev-dependencies]
 bp-test-utils = { path = "../test-utils" }
diff --git a/cumulus/bridges/primitives/header-chain/src/justification/mod.rs b/bridges/primitives/header-chain/src/justification/mod.rs
similarity index 97%
rename from cumulus/bridges/primitives/header-chain/src/justification/mod.rs
rename to bridges/primitives/header-chain/src/justification/mod.rs
index 24c453a0790..72a5f68918d 100644
--- a/cumulus/bridges/primitives/header-chain/src/justification/mod.rs
+++ b/bridges/primitives/header-chain/src/justification/mod.rs
@@ -97,7 +97,11 @@ impl<H: HeaderT> GrandpaJustification<H> {
 	}
 }
 
-impl<H: HeaderT> crate::FinalityProof<H::Number> for GrandpaJustification<H> {
+impl<H: HeaderT> crate::FinalityProof<H::Hash, H::Number> for GrandpaJustification<H> {
+	fn target_header_hash(&self) -> H::Hash {
+		self.commit.target_hash
+	}
+
 	fn target_header_number(&self) -> H::Number {
 		self.commit.target_number
 	}
diff --git a/cumulus/bridges/primitives/header-chain/src/justification/verification/equivocation.rs b/bridges/primitives/header-chain/src/justification/verification/equivocation.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/src/justification/verification/equivocation.rs
rename to bridges/primitives/header-chain/src/justification/verification/equivocation.rs
diff --git a/cumulus/bridges/primitives/header-chain/src/justification/verification/mod.rs b/bridges/primitives/header-chain/src/justification/verification/mod.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/src/justification/verification/mod.rs
rename to bridges/primitives/header-chain/src/justification/verification/mod.rs
diff --git a/cumulus/bridges/primitives/header-chain/src/justification/verification/optimizer.rs b/bridges/primitives/header-chain/src/justification/verification/optimizer.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/src/justification/verification/optimizer.rs
rename to bridges/primitives/header-chain/src/justification/verification/optimizer.rs
diff --git a/cumulus/bridges/primitives/header-chain/src/justification/verification/strict.rs b/bridges/primitives/header-chain/src/justification/verification/strict.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/src/justification/verification/strict.rs
rename to bridges/primitives/header-chain/src/justification/verification/strict.rs
diff --git a/cumulus/bridges/primitives/header-chain/src/lib.rs b/bridges/primitives/header-chain/src/lib.rs
similarity index 98%
rename from cumulus/bridges/primitives/header-chain/src/lib.rs
rename to bridges/primitives/header-chain/src/lib.rs
index 7008dfa6063..d2c7ec0759e 100644
--- a/cumulus/bridges/primitives/header-chain/src/lib.rs
+++ b/bridges/primitives/header-chain/src/lib.rs
@@ -127,7 +127,10 @@ pub struct InitializationData<H: HeaderT> {
 }
 
 /// Abstract finality proof that is justifying block finality.
-pub trait FinalityProof<Number>: Clone + Send + Sync + Debug {
+pub trait FinalityProof<Hash, Number>: Clone + Send + Sync + Debug {
+	/// Return hash of header that this proof is generated for.
+	fn target_header_hash(&self) -> Hash;
+
 	/// Return number of header that this proof is generated for.
 	fn target_header_number(&self) -> Number;
 }
@@ -209,7 +212,7 @@ impl<Header: HeaderT> TryFrom<StoredHeaderGrandpaInfo<Header>> for HeaderGrandpa
 /// Helper trait for finding equivocations in finality proofs.
 pub trait FindEquivocations<FinalityProof, FinalityVerificationContext, EquivocationProof> {
 	/// The type returned when encountering an error while looking for equivocations.
-	type Error;
+	type Error: Debug;
 
 	/// Find equivocations.
 	fn find_equivocations(
diff --git a/cumulus/bridges/primitives/header-chain/src/storage_keys.rs b/bridges/primitives/header-chain/src/storage_keys.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/src/storage_keys.rs
rename to bridges/primitives/header-chain/src/storage_keys.rs
diff --git a/cumulus/bridges/primitives/header-chain/tests/implementation_match.rs b/bridges/primitives/header-chain/tests/implementation_match.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/tests/implementation_match.rs
rename to bridges/primitives/header-chain/tests/implementation_match.rs
diff --git a/cumulus/bridges/primitives/header-chain/tests/justification/equivocation.rs b/bridges/primitives/header-chain/tests/justification/equivocation.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/tests/justification/equivocation.rs
rename to bridges/primitives/header-chain/tests/justification/equivocation.rs
diff --git a/cumulus/bridges/primitives/header-chain/tests/justification/optimizer.rs b/bridges/primitives/header-chain/tests/justification/optimizer.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/tests/justification/optimizer.rs
rename to bridges/primitives/header-chain/tests/justification/optimizer.rs
diff --git a/cumulus/bridges/primitives/header-chain/tests/justification/strict.rs b/bridges/primitives/header-chain/tests/justification/strict.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/tests/justification/strict.rs
rename to bridges/primitives/header-chain/tests/justification/strict.rs
diff --git a/cumulus/bridges/primitives/header-chain/tests/tests.rs b/bridges/primitives/header-chain/tests/tests.rs
similarity index 100%
rename from cumulus/bridges/primitives/header-chain/tests/tests.rs
rename to bridges/primitives/header-chain/tests/tests.rs
diff --git a/cumulus/bridges/primitives/messages/Cargo.toml b/bridges/primitives/messages/Cargo.toml
similarity index 78%
rename from cumulus/bridges/primitives/messages/Cargo.toml
rename to bridges/primitives/messages/Cargo.toml
index b1fa6d575ae..b30d6d2559f 100644
--- a/cumulus/bridges/primitives/messages/Cargo.toml
+++ b/bridges/primitives/messages/Cargo.toml
@@ -18,9 +18,9 @@ bp-header-chain = { path = "../header-chain", default-features = false }
 
 # Substrate Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [dev-dependencies]
 hex = "0.4"
diff --git a/cumulus/bridges/primitives/messages/src/lib.rs b/bridges/primitives/messages/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/messages/src/lib.rs
rename to bridges/primitives/messages/src/lib.rs
diff --git a/cumulus/bridges/primitives/messages/src/source_chain.rs b/bridges/primitives/messages/src/source_chain.rs
similarity index 100%
rename from cumulus/bridges/primitives/messages/src/source_chain.rs
rename to bridges/primitives/messages/src/source_chain.rs
diff --git a/cumulus/bridges/primitives/messages/src/storage_keys.rs b/bridges/primitives/messages/src/storage_keys.rs
similarity index 100%
rename from cumulus/bridges/primitives/messages/src/storage_keys.rs
rename to bridges/primitives/messages/src/storage_keys.rs
diff --git a/cumulus/bridges/primitives/messages/src/target_chain.rs b/bridges/primitives/messages/src/target_chain.rs
similarity index 100%
rename from cumulus/bridges/primitives/messages/src/target_chain.rs
rename to bridges/primitives/messages/src/target_chain.rs
diff --git a/cumulus/bridges/primitives/parachains/Cargo.toml b/bridges/primitives/parachains/Cargo.toml
similarity index 72%
rename from cumulus/bridges/primitives/parachains/Cargo.toml
rename to bridges/primitives/parachains/Cargo.toml
index 978296954bb..ca69523dde3 100644
--- a/cumulus/bridges/primitives/parachains/Cargo.toml
+++ b/bridges/primitives/parachains/Cargo.toml
@@ -19,10 +19,10 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/parachains/src/lib.rs b/bridges/primitives/parachains/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/parachains/src/lib.rs
rename to bridges/primitives/parachains/src/lib.rs
diff --git a/cumulus/bridges/primitives/polkadot-core/Cargo.toml b/bridges/primitives/polkadot-core/Cargo.toml
similarity index 69%
rename from cumulus/bridges/primitives/polkadot-core/Cargo.toml
rename to bridges/primitives/polkadot-core/Cargo.toml
index 2563adaf219..aa7eb8024fb 100644
--- a/cumulus/bridges/primitives/polkadot-core/Cargo.toml
+++ b/bridges/primitives/polkadot-core/Cargo.toml
@@ -19,11 +19,11 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate Based Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [dev-dependencies]
 hex = "0.4"
diff --git a/cumulus/bridges/primitives/polkadot-core/src/lib.rs b/bridges/primitives/polkadot-core/src/lib.rs
similarity index 81%
rename from cumulus/bridges/primitives/polkadot-core/src/lib.rs
rename to bridges/primitives/polkadot-core/src/lib.rs
index b35d97ec79a..af39b5ab9ba 100644
--- a/cumulus/bridges/primitives/polkadot-core/src/lib.rs
+++ b/bridges/primitives/polkadot-core/src/lib.rs
@@ -17,7 +17,15 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 
 use bp_messages::MessageNonce;
-use bp_runtime::{Chain, EncodedOrDecodedCall, StorageMapKeyProvider};
+use bp_runtime::{
+	self,
+	extensions::{
+		ChargeTransactionPayment, CheckEra, CheckGenesis, CheckNonZeroSender, CheckNonce,
+		CheckSpecVersion, CheckTxVersion, CheckWeight, GenericSignedExtension,
+		SignedExtensionSchema,
+	},
+	Chain, EncodedOrDecodedCall, StorageMapKeyProvider, TransactionEra,
+};
 use frame_support::{
 	dispatch::DispatchClass,
 	parameter_types,
@@ -272,6 +280,99 @@ impl AccountInfoStorageMapKeyProvider {
 	}
 }
 
+/// Extra signed extension data that is used by most chains.
+pub type CommonSignedExtra = (
+	CheckNonZeroSender,
+	CheckSpecVersion,
+	CheckTxVersion,
+	CheckGenesis<Hash>,
+	CheckEra<Hash>,
+	CheckNonce<Nonce>,
+	CheckWeight,
+	ChargeTransactionPayment<Balance>,
+);
+
+/// Extra signed extension data that starts with `CommonSignedExtra`.
+pub type SuffixedCommonSignedExtension<Suffix> =
+	GenericSignedExtension<(CommonSignedExtra, Suffix)>;
+
+/// Helper trait to define some extra methods on `SuffixedCommonSignedExtension`.
+pub trait SuffixedCommonSignedExtensionExt<Suffix: SignedExtensionSchema> {
+	/// Create signed extension from its components.
+	fn from_params(
+		spec_version: u32,
+		transaction_version: u32,
+		era: TransactionEra<BlockNumber, Hash>,
+		genesis_hash: Hash,
+		nonce: Nonce,
+		tip: Balance,
+		extra: (Suffix::Payload, Suffix::AdditionalSigned),
+	) -> Self;
+
+	/// Return transaction nonce.
+	fn nonce(&self) -> Nonce;
+
+	/// Return transaction tip.
+	fn tip(&self) -> Balance;
+}
+
+impl<Suffix> SuffixedCommonSignedExtensionExt<Suffix> for SuffixedCommonSignedExtension<Suffix>
+where
+	Suffix: SignedExtensionSchema,
+{
+	fn from_params(
+		spec_version: u32,
+		transaction_version: u32,
+		era: TransactionEra<BlockNumber, Hash>,
+		genesis_hash: Hash,
+		nonce: Nonce,
+		tip: Balance,
+		extra: (Suffix::Payload, Suffix::AdditionalSigned),
+	) -> Self {
+		GenericSignedExtension::new(
+			(
+				(
+					(),              // non-zero sender
+					(),              // spec version
+					(),              // tx version
+					(),              // genesis
+					era.frame_era(), // era
+					nonce.into(),    // nonce (compact encoding)
+					(),              // Check weight
+					tip.into(),      // transaction payment / tip (compact encoding)
+				),
+				extra.0,
+			),
+			Some((
+				(
+					(),
+					spec_version,
+					transaction_version,
+					genesis_hash,
+					era.signed_payload(genesis_hash),
+					(),
+					(),
+					(),
+				),
+				extra.1,
+			)),
+		)
+	}
+
+	fn nonce(&self) -> Nonce {
+		let common_payload = self.payload.0;
+		common_payload.5 .0
+	}
+
+	fn tip(&self) -> Balance {
+		let common_payload = self.payload.0;
+		common_payload.7 .0
+	}
+}
+
+/// Signed extension that is used by most chains.
+pub type CommonSignedExtension = SuffixedCommonSignedExtension<()>;
+
 #[cfg(test)]
 mod tests {
 	use super::*;
diff --git a/cumulus/bridges/primitives/polkadot-core/src/parachains.rs b/bridges/primitives/polkadot-core/src/parachains.rs
similarity index 100%
rename from cumulus/bridges/primitives/polkadot-core/src/parachains.rs
rename to bridges/primitives/polkadot-core/src/parachains.rs
diff --git a/cumulus/bridges/primitives/relayers/Cargo.toml b/bridges/primitives/relayers/Cargo.toml
similarity index 74%
rename from cumulus/bridges/primitives/relayers/Cargo.toml
rename to bridges/primitives/relayers/Cargo.toml
index bc674d4cb77..99cd79c6841 100644
--- a/cumulus/bridges/primitives/relayers/Cargo.toml
+++ b/bridges/primitives/relayers/Cargo.toml
@@ -17,9 +17,9 @@ bp-runtime = { path = "../runtime", default-features = false }
 
 # Substrate Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
 
 [dev-dependencies]
 hex = "0.4"
diff --git a/cumulus/bridges/primitives/relayers/src/lib.rs b/bridges/primitives/relayers/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/relayers/src/lib.rs
rename to bridges/primitives/relayers/src/lib.rs
diff --git a/cumulus/bridges/primitives/relayers/src/registration.rs b/bridges/primitives/relayers/src/registration.rs
similarity index 100%
rename from cumulus/bridges/primitives/relayers/src/registration.rs
rename to bridges/primitives/relayers/src/registration.rs
diff --git a/cumulus/bridges/primitives/runtime/Cargo.toml b/bridges/primitives/runtime/Cargo.toml
similarity index 60%
rename from cumulus/bridges/primitives/runtime/Cargo.toml
rename to bridges/primitives/runtime/Cargo.toml
index f6134d6e332..98269a1ffbb 100644
--- a/cumulus/bridges/primitives/runtime/Cargo.toml
+++ b/bridges/primitives/runtime/Cargo.toml
@@ -17,14 +17,14 @@ serde = { version = "1.0", default-features = false, features = ["alloc", "deriv
 
 # Substrate Dependencies
 
-frame-support = { path = "../../../../substrate/frame/support", default-features = false }
-frame-system = { path = "../../../../substrate/frame/system", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-io = { path = "../../../../substrate/primitives/io", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false, features = ["serde"] }
-sp-state-machine = { path = "../../../../substrate/primitives/state-machine", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
-sp-trie = { path = "../../../../substrate/primitives/trie", default-features = false }
+frame-support = { path = "../../../substrate/frame/support", default-features = false }
+frame-system = { path = "../../../substrate/frame/system", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-io = { path = "../../../substrate/primitives/io", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false, features = ["serde"] }
+sp-state-machine = { path = "../../../substrate/primitives/state-machine", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
+sp-trie = { path = "../../../substrate/primitives/trie", default-features = false }
 trie-db = { version = "0.27.1", default-features = false }
 
 [dev-dependencies]
diff --git a/cumulus/bridges/primitives/runtime/src/chain.rs b/bridges/primitives/runtime/src/chain.rs
similarity index 100%
rename from cumulus/bridges/primitives/runtime/src/chain.rs
rename to bridges/primitives/runtime/src/chain.rs
diff --git a/cumulus/bridges/primitives/runtime/src/extensions.rs b/bridges/primitives/runtime/src/extensions.rs
similarity index 94%
rename from cumulus/bridges/primitives/runtime/src/extensions.rs
rename to bridges/primitives/runtime/src/extensions.rs
index 253350d17e7..44eeaad93c9 100644
--- a/cumulus/bridges/primitives/runtime/src/extensions.rs
+++ b/bridges/primitives/runtime/src/extensions.rs
@@ -35,7 +35,12 @@ pub trait SignedExtensionSchema: Encode + Decode + Debug + Eq + Clone + StaticTy
 	type AdditionalSigned: Encode + Debug + Eq + Clone + StaticTypeInfo;
 }
 
-// An implementation of `SignedExtensionSchema` using generic params.
+impl SignedExtensionSchema for () {
+	type Payload = ();
+	type AdditionalSigned = ();
+}
+
+/// An implementation of `SignedExtensionSchema` using generic params.
 #[derive(Encode, Decode, Clone, Debug, PartialEq, Eq, TypeInfo)]
 pub struct GenericSignedExtensionSchema<P, S>(PhantomData<(P, S)>);
 
@@ -72,6 +77,9 @@ pub type CheckWeight = GenericSignedExtensionSchema<(), ()>;
 /// The `SignedExtensionSchema` for `pallet_transaction_payment::ChargeTransactionPayment`.
 pub type ChargeTransactionPayment<Balance> = GenericSignedExtensionSchema<Compact<Balance>, ()>;
 
+/// The `SignedExtensionSchema` for `polkadot-runtime-common::PrevalidateAttests`.
+pub type PrevalidateAttests = GenericSignedExtensionSchema<(), ()>;
+
 /// The `SignedExtensionSchema` for `BridgeRejectObsoleteHeadersAndMessages`.
 pub type BridgeRejectObsoleteHeadersAndMessages = GenericSignedExtensionSchema<(), ()>;
 
@@ -99,7 +107,7 @@ pub struct GenericSignedExtension<S: SignedExtensionSchema> {
 	// It may be set to `None` if extensions are decoded. We are never reconstructing transactions
 	// (and it makes no sense to do that) => decoded version of `SignedExtensions` is only used to
 	// read fields of the `payload`. And when resigning transaction, we're reconstructing
-	// `SignedExtensions` from the scratch.
+	// `SignedExtensions` from scratch.
 	additional_signed: Option<S::AdditionalSigned>,
 }
 
diff --git a/cumulus/bridges/primitives/runtime/src/lib.rs b/bridges/primitives/runtime/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/runtime/src/lib.rs
rename to bridges/primitives/runtime/src/lib.rs
diff --git a/cumulus/bridges/primitives/runtime/src/messages.rs b/bridges/primitives/runtime/src/messages.rs
similarity index 100%
rename from cumulus/bridges/primitives/runtime/src/messages.rs
rename to bridges/primitives/runtime/src/messages.rs
diff --git a/cumulus/bridges/primitives/runtime/src/storage_proof.rs b/bridges/primitives/runtime/src/storage_proof.rs
similarity index 100%
rename from cumulus/bridges/primitives/runtime/src/storage_proof.rs
rename to bridges/primitives/runtime/src/storage_proof.rs
diff --git a/cumulus/bridges/primitives/runtime/src/storage_types.rs b/bridges/primitives/runtime/src/storage_types.rs
similarity index 100%
rename from cumulus/bridges/primitives/runtime/src/storage_types.rs
rename to bridges/primitives/runtime/src/storage_types.rs
diff --git a/cumulus/bridges/primitives/test-utils/Cargo.toml b/bridges/primitives/test-utils/Cargo.toml
similarity index 63%
rename from cumulus/bridges/primitives/test-utils/Cargo.toml
rename to bridges/primitives/test-utils/Cargo.toml
index f6e8533705e..652ffe985c6 100644
--- a/cumulus/bridges/primitives/test-utils/Cargo.toml
+++ b/bridges/primitives/test-utils/Cargo.toml
@@ -14,12 +14,12 @@ bp-runtime = { path = "../runtime", default-features = false }
 codec = { package = "parity-scale-codec", version = "3.1.5", default-features = false }
 ed25519-dalek = { version = "2.0", default-features = false }
 finality-grandpa = { version = "0.16.2", default-features = false }
-sp-application-crypto = { path = "../../../../substrate/primitives/application-crypto", default-features = false }
-sp-consensus-grandpa = { path = "../../../../substrate/primitives/consensus/grandpa", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-std = { path = "../../../../substrate/primitives/std", default-features = false }
-sp-trie = { path = "../../../../substrate/primitives/trie", default-features = false }
+sp-application-crypto = { path = "../../../substrate/primitives/application-crypto", default-features = false }
+sp-consensus-grandpa = { path = "../../../substrate/primitives/consensus/grandpa", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-std = { path = "../../../substrate/primitives/std", default-features = false }
+sp-trie = { path = "../../../substrate/primitives/trie", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/test-utils/src/keyring.rs b/bridges/primitives/test-utils/src/keyring.rs
similarity index 100%
rename from cumulus/bridges/primitives/test-utils/src/keyring.rs
rename to bridges/primitives/test-utils/src/keyring.rs
diff --git a/cumulus/bridges/primitives/test-utils/src/lib.rs b/bridges/primitives/test-utils/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/test-utils/src/lib.rs
rename to bridges/primitives/test-utils/src/lib.rs
diff --git a/cumulus/bridges/primitives/xcm-bridge-hub-router/Cargo.toml b/bridges/primitives/xcm-bridge-hub-router/Cargo.toml
similarity index 76%
rename from cumulus/bridges/primitives/xcm-bridge-hub-router/Cargo.toml
rename to bridges/primitives/xcm-bridge-hub-router/Cargo.toml
index df2b00563de..725a7d94564 100644
--- a/cumulus/bridges/primitives/xcm-bridge-hub-router/Cargo.toml
+++ b/bridges/primitives/xcm-bridge-hub-router/Cargo.toml
@@ -11,8 +11,8 @@ codec = { package = "parity-scale-codec", version = "3.1.5", default-features =
 scale-info = { version = "2.9.0", default-features = false, features = ["bit-vec", "derive"] }
 
 # Substrate Dependencies
-sp-runtime = { path = "../../../../substrate/primitives/runtime", default-features = false }
-sp-core = { path = "../../../../substrate/primitives/core", default-features = false }
+sp-runtime = { path = "../../../substrate/primitives/runtime", default-features = false }
+sp-core = { path = "../../../substrate/primitives/core", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/bridges/primitives/xcm-bridge-hub-router/src/lib.rs b/bridges/primitives/xcm-bridge-hub-router/src/lib.rs
similarity index 100%
rename from cumulus/bridges/primitives/xcm-bridge-hub-router/src/lib.rs
rename to bridges/primitives/xcm-bridge-hub-router/src/lib.rs
diff --git a/cumulus/bridges/scripts/verify-pallets-build.sh b/bridges/scripts/verify-pallets-build.sh
similarity index 93%
rename from cumulus/bridges/scripts/verify-pallets-build.sh
rename to bridges/scripts/verify-pallets-build.sh
index 1ea3dbe8626..b8ac09e26b8 100755
--- a/cumulus/bridges/scripts/verify-pallets-build.sh
+++ b/bridges/scripts/verify-pallets-build.sh
@@ -89,17 +89,26 @@ rm -rf $BRIDGES_FOLDER/scripts/update-weights-setup.sh
 rm -rf $BRIDGES_FOLDER/scripts/update_substrate.sh
 rm -rf $BRIDGES_FOLDER/tools
 rm -f $BRIDGES_FOLDER/.dockerignore
+rm -f $BRIDGES_FOLDER/local.Dockerfile.dockerignore
 rm -f $BRIDGES_FOLDER/deny.toml
 rm -f $BRIDGES_FOLDER/.gitlab-ci.yml
 rm -f $BRIDGES_FOLDER/.editorconfig
 rm -f $BRIDGES_FOLDER/Cargo.toml
 rm -f $BRIDGES_FOLDER/ci.Dockerfile
+rm -f $BRIDGES_FOLDER/local.Dockerfile
 rm -f $BRIDGES_FOLDER/CODEOWNERS
 rm -f $BRIDGES_FOLDER/Dockerfile
+rm -f $BRIDGES_FOLDER/rustfmt.toml
 
 # let's fix Cargo.toml a bit (it'll be helpful if we are in the bridges repo)
 if [[ ! -f "Cargo.toml" ]]; then
 	cat > Cargo.toml <<-CARGO_TOML
+	[workspace.package]
+	authors = ["Parity Technologies <admin@parity.io>"]
+	edition = "2021"
+	repository = "https://github.com/paritytech/parity-bridges-common.git"
+	license = "GPL-3.0-only"
+
 	[workspace]
 	resolver = "2"
 
diff --git a/cumulus/parachains/integration-tests/emulated/bridges/bridge-hub-rococo/Cargo.toml b/cumulus/parachains/integration-tests/emulated/bridges/bridge-hub-rococo/Cargo.toml
index ee689685554..c02c96255e1 100644
--- a/cumulus/parachains/integration-tests/emulated/bridges/bridge-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/bridges/bridge-hub-rococo/Cargo.toml
@@ -25,8 +25,8 @@ pallet-xcm = { path = "../../../../../../polkadot/xcm/pallet-xcm", default-featu
 parachains-common = { path = "../../../../common" }
 cumulus-pallet-xcmp-queue = { path = "../../../../../pallets/xcmp-queue", default-features = false}
 cumulus-pallet-dmp-queue = { path = "../../../../../pallets/dmp-queue", default-features = false}
-pallet-bridge-messages = { path = "../../../../../bridges/modules/messages", default-features = false}
-bp-messages = { path = "../../../../../bridges/primitives/messages", default-features = false}
+pallet-bridge-messages = { path = "../../../../../../bridges/modules/messages", default-features = false}
+bp-messages = { path = "../../../../../../bridges/primitives/messages", default-features = false}
 
 # Local
 xcm-emulator = { path = "../../../../../xcm/xcm-emulator", default-features = false}
diff --git a/cumulus/parachains/integration-tests/emulated/common/Cargo.toml b/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
index ac1e650d5de..925d2fc1939 100644
--- a/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
+++ b/cumulus/parachains/integration-tests/emulated/common/Cargo.toml
@@ -56,9 +56,9 @@ xcm-emulator = { path = "../../../../xcm/xcm-emulator", default-features = false
 cumulus-pallet-dmp-queue = { path = "../../../../pallets/dmp-queue" }
 cumulus-pallet-xcmp-queue = { path = "../../../../pallets/xcmp-queue", default-features = false}
 cumulus-pallet-parachain-system = { path = "../../../../pallets/parachain-system" }
-bp-messages = { path = "../../../../bridges/primitives/messages" }
-pallet-bridge-messages = { path = "../../../../bridges/modules/messages" }
-bridge-runtime-common = { path = "../../../../bridges/bin/runtime-common" }
+bp-messages = { path = "../../../../../bridges/primitives/messages" }
+pallet-bridge-messages = { path = "../../../../../bridges/modules/messages" }
+bridge-runtime-common = { path = "../../../../../bridges/bin/runtime-common" }
 
 [features]
 runtime-benchmarks = [
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 d65fb9b72cd..395edafa651 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/Cargo.toml
@@ -72,26 +72,26 @@ parachain-info = { path = "../../../pallets/parachain-info", default-features =
 parachains-common = { path = "../../../common", default-features = false }
 
 # Bridges
-bp-bridge-hub-rococo = { path = "../../../../bridges/primitives/chain-bridge-hub-rococo", default-features = false }
-bp-bridge-hub-wococo = { path = "../../../../bridges/primitives/chain-bridge-hub-wococo", default-features = false }
-bp-header-chain = { path = "../../../../bridges/primitives/header-chain", default-features = false }
-bp-messages = { path = "../../../../bridges/primitives/messages", default-features = false }
-bp-parachains = { path = "../../../../bridges/primitives/parachains", default-features = false }
-bp-polkadot-core = { path = "../../../../bridges/primitives/polkadot-core", default-features = false }
-bp-relayers = { path = "../../../../bridges/primitives/relayers", default-features = false }
-bp-runtime = { path = "../../../../bridges/primitives/runtime", default-features = false }
-bp-rococo = { path = "../../../../bridges/primitives/chain-rococo", default-features = false }
-bp-wococo = { path = "../../../../bridges/primitives/chain-wococo", default-features = false }
-pallet-bridge-grandpa = { path = "../../../../bridges/modules/grandpa", default-features = false }
-pallet-bridge-messages = { path = "../../../../bridges/modules/messages", default-features = false }
-pallet-bridge-parachains = { path = "../../../../bridges/modules/parachains", default-features = false }
-pallet-bridge-relayers = { path = "../../../../bridges/modules/relayers", default-features = false }
-bridge-runtime-common = { path = "../../../../bridges/bin/runtime-common", default-features = false }
+bp-bridge-hub-rococo = { path = "../../../../../bridges/primitives/chain-bridge-hub-rococo", default-features = false }
+bp-bridge-hub-wococo = { path = "../../../../../bridges/primitives/chain-bridge-hub-wococo", default-features = false }
+bp-header-chain = { path = "../../../../../bridges/primitives/header-chain", default-features = false }
+bp-messages = { path = "../../../../../bridges/primitives/messages", default-features = false }
+bp-parachains = { path = "../../../../../bridges/primitives/parachains", default-features = false }
+bp-polkadot-core = { path = "../../../../../bridges/primitives/polkadot-core", default-features = false }
+bp-relayers = { path = "../../../../../bridges/primitives/relayers", default-features = false }
+bp-runtime = { path = "../../../../../bridges/primitives/runtime", default-features = false }
+bp-rococo = { path = "../../../../../bridges/primitives/chain-rococo", default-features = false }
+bp-wococo = { path = "../../../../../bridges/primitives/chain-wococo", default-features = false }
+pallet-bridge-grandpa = { path = "../../../../../bridges/modules/grandpa", default-features = false }
+pallet-bridge-messages = { path = "../../../../../bridges/modules/messages", default-features = false }
+pallet-bridge-parachains = { path = "../../../../../bridges/modules/parachains", default-features = false }
+pallet-bridge-relayers = { path = "../../../../../bridges/modules/relayers", default-features = false }
+bridge-runtime-common = { path = "../../../../../bridges/bin/runtime-common", default-features = false }
 
 [dev-dependencies]
 static_assertions = "1.1"
 bridge-hub-test-utils = { path = "../test-utils" }
-bridge-runtime-common = { path = "../../../../bridges/bin/runtime-common", features = ["integrity-test"] }
+bridge-runtime-common = { path = "../../../../../bridges/bin/runtime-common", features = ["integrity-test"] }
 sp-keyring = { path = "../../../../../substrate/primitives/keyring" }
 
 [features]
diff --git a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs
index 4311a6a629f..309a5cfb0b1 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs
+++ b/cumulus/parachains/runtimes/bridge-hubs/bridge-hub-rococo/src/lib.rs
@@ -1243,55 +1243,67 @@ cumulus_pallet_parachain_system::register_validate_block! {
 #[cfg(test)]
 mod tests {
 	use super::*;
-	use bp_runtime::TransactionEra;
-	use bridge_hub_test_utils::test_header;
 	use codec::Encode;
-
-	pub type TestBlockHeader =
-		sp_runtime::generic::Header<bp_polkadot_core::BlockNumber, bp_polkadot_core::Hasher>;
+	use sp_runtime::{
+		generic::Era,
+		traits::{SignedExtension, Zero},
+	};
 
 	#[test]
 	fn ensure_signed_extension_definition_is_compatible_with_relay() {
-		let payload: SignedExtra = (
-			frame_system::CheckNonZeroSender::new(),
-			frame_system::CheckSpecVersion::new(),
-			frame_system::CheckTxVersion::new(),
-			frame_system::CheckGenesis::new(),
-			frame_system::CheckEra::from(sp_runtime::generic::Era::Immortal),
-			frame_system::CheckNonce::from(10),
-			frame_system::CheckWeight::new(),
-			pallet_transaction_payment::ChargeTransactionPayment::from(10),
-			BridgeRejectObsoleteHeadersAndMessages {},
-			(
-				BridgeRefundBridgeHubRococoMessages::default(),
-				BridgeRefundBridgeHubWococoMessages::default(),
-			),
-		);
-
-		{
-			use bp_bridge_hub_rococo::BridgeHubSignedExtension;
-			let bhr_indirect_payload = bp_bridge_hub_rococo::SignedExtension::from_params(
-				10,
-				10,
-				TransactionEra::Immortal,
-				test_header::<TestBlockHeader>(1).hash(),
-				10,
-				10,
+		use bp_polkadot_core::SuffixedCommonSignedExtensionExt;
+
+		sp_io::TestExternalities::default().execute_with(|| {
+			frame_system::BlockHash::<Runtime>::insert(BlockNumber::zero(), Hash::default());
+			let payload: SignedExtra = (
+				frame_system::CheckNonZeroSender::new(),
+				frame_system::CheckSpecVersion::new(),
+				frame_system::CheckTxVersion::new(),
+				frame_system::CheckGenesis::new(),
+				frame_system::CheckEra::from(Era::Immortal),
+				frame_system::CheckNonce::from(10),
+				frame_system::CheckWeight::new(),
+				pallet_transaction_payment::ChargeTransactionPayment::from(10),
+				BridgeRejectObsoleteHeadersAndMessages,
+				(
+					BridgeRefundBridgeHubRococoMessages::default(),
+					BridgeRefundBridgeHubWococoMessages::default(),
+				),
 			);
-			assert_eq!(payload.encode(), bhr_indirect_payload.encode());
-		}
 
-		{
-			use bp_bridge_hub_wococo::BridgeHubSignedExtension;
-			let bhw_indirect_payload = bp_bridge_hub_wococo::SignedExtension::from_params(
-				10,
-				10,
-				TransactionEra::Immortal,
-				test_header::<TestBlockHeader>(1).hash(),
-				10,
-				10,
-			);
-			assert_eq!(payload.encode(), bhw_indirect_payload.encode());
-		}
+			{
+				let bhr_indirect_payload = bp_bridge_hub_rococo::SignedExtension::from_params(
+					VERSION.spec_version,
+					VERSION.transaction_version,
+					bp_runtime::TransactionEra::Immortal,
+					System::block_hash(BlockNumber::zero()),
+					10,
+					10,
+					(((), ()), ((), ())),
+				);
+				assert_eq!(payload.encode(), bhr_indirect_payload.encode());
+				assert_eq!(
+					payload.additional_signed().unwrap().encode(),
+					bhr_indirect_payload.additional_signed().unwrap().encode()
+				)
+			}
+
+			{
+				let bhw_indirect_payload = bp_bridge_hub_rococo::SignedExtension::from_params(
+					VERSION.spec_version,
+					VERSION.transaction_version,
+					bp_runtime::TransactionEra::Immortal,
+					System::block_hash(BlockNumber::zero()),
+					10,
+					10,
+					(((), ()), ((), ())),
+				);
+				assert_eq!(payload.encode(), bhw_indirect_payload.encode());
+				assert_eq!(
+					payload.additional_signed().unwrap().encode(),
+					bhw_indirect_payload.additional_signed().unwrap().encode()
+				)
+			}
+		});
 	}
 }
diff --git a/cumulus/parachains/runtimes/bridge-hubs/test-utils/Cargo.toml b/cumulus/parachains/runtimes/bridge-hubs/test-utils/Cargo.toml
index 73678e8f91a..4a15640952d 100644
--- a/cumulus/parachains/runtimes/bridge-hubs/test-utils/Cargo.toml
+++ b/cumulus/parachains/runtimes/bridge-hubs/test-utils/Cargo.toml
@@ -42,20 +42,20 @@ xcm-builder = { package = "staging-xcm-builder", path = "../../../../../polkadot
 xcm-executor = { package = "staging-xcm-executor", path = "../../../../../polkadot/xcm/xcm-executor", default-features = false}
 
 # Bridges
-bp-bridge-hub-rococo = { path = "../../../../bridges/primitives/chain-bridge-hub-rococo", default-features = false }
-bp-bridge-hub-wococo = { path = "../../../../bridges/primitives/chain-bridge-hub-wococo", default-features = false }
-bp-header-chain = { path = "../../../../bridges/primitives/header-chain", default-features = false }
-bp-messages = { path = "../../../../bridges/primitives/messages", default-features = false }
-bp-parachains = { path = "../../../../bridges/primitives/parachains", default-features = false }
-bp-polkadot-core = { path = "../../../../bridges/primitives/polkadot-core", default-features = false }
-bp-relayers = { path = "../../../../bridges/primitives/relayers", default-features = false }
-bp-runtime = { path = "../../../../bridges/primitives/runtime", default-features = false }
-bp-test-utils = { path = "../../../../bridges/primitives/test-utils", default-features = false }
-pallet-bridge-grandpa = { path = "../../../../bridges/modules/grandpa", default-features = false }
-pallet-bridge-parachains = { path = "../../../../bridges/modules/parachains", default-features = false }
-pallet-bridge-messages = { path = "../../../../bridges/modules/messages", default-features = false }
-pallet-bridge-relayers = { path = "../../../../bridges/modules/relayers", default-features = false }
-bridge-runtime-common = { path = "../../../../bridges/bin/runtime-common", default-features = false }
+bp-bridge-hub-rococo = { path = "../../../../../bridges/primitives/chain-bridge-hub-rococo", default-features = false }
+bp-bridge-hub-wococo = { path = "../../../../../bridges/primitives/chain-bridge-hub-wococo", default-features = false }
+bp-header-chain = { path = "../../../../../bridges/primitives/header-chain", default-features = false }
+bp-messages = { path = "../../../../../bridges/primitives/messages", default-features = false }
+bp-parachains = { path = "../../../../../bridges/primitives/parachains", default-features = false }
+bp-polkadot-core = { path = "../../../../../bridges/primitives/polkadot-core", default-features = false }
+bp-relayers = { path = "../../../../../bridges/primitives/relayers", default-features = false }
+bp-runtime = { path = "../../../../../bridges/primitives/runtime", default-features = false }
+bp-test-utils = { path = "../../../../../bridges/primitives/test-utils", default-features = false }
+pallet-bridge-grandpa = { path = "../../../../../bridges/modules/grandpa", default-features = false }
+pallet-bridge-parachains = { path = "../../../../../bridges/modules/parachains", default-features = false }
+pallet-bridge-messages = { path = "../../../../../bridges/modules/messages", default-features = false }
+pallet-bridge-relayers = { path = "../../../../../bridges/modules/relayers", default-features = false }
+bridge-runtime-common = { path = "../../../../../bridges/bin/runtime-common", default-features = false }
 
 [features]
 default = [ "std" ]
diff --git a/cumulus/scripts/bridges_update_subtree.sh b/scripts/bridges_update_subtree.sh
similarity index 100%
rename from cumulus/scripts/bridges_update_subtree.sh
rename to scripts/bridges_update_subtree.sh
-- 
GitLab